Blog-ul lui Sabin

Despre mine (Sabin):

  • sunt cel mai Maxim dintre toți;
  • codez și îmi place C/C++;
  • codez și nu îmi place JavaScript;
  • prefer să lucrez în HTML/CSS vanilla;
  • mai nou n-am ce face și am făcut un blog;

Am mai multe proiecte aici!


Despre site:

  • nu are tracker-e sau reclame (acest lucru nu se va schimba niciodată);
  • funcționează și fără CSS, dar oricum am doar în jur de 500 de linii (formatate) de CSS pentru întreg blog-ul, deci dacă crezi că CSS-ul nu se merită, accesează acest site;
  • folosește o singură librărie JavaScript, „microlight”, ce este de 2.2KB ca dimensiune;
  • este generat cu un script PHP;
  • postările sunt scrise în Markdown (Parsedown Extra + Plugin);
  • este format doar dintr-o singură pagină HTML, fără script-uri excesive sau alt „bloatware”;
  • fișierul HTML și cel CSS sunt compresare, originalele sunt puse în directorul uncompressed de pe GitHub;
  • proiectul este realizat sub licența CC BY-NC 4.0, deci poți să îmi copiezi tot site-ul cât timp respecți câteva reguli, vezi codul sursă și mai multe informații aici;

Contact:

  • Prin email: sabinaronddisroot.org
  • Cu următorul formular:

Log4Shell: cel mai devastator cadou de Crăciun

Cuvintele subliniate au explicații, țineți mouse-ul pe cuvânt pentru a vedea acestea.
imagine
Sursă: lunasec.io

Trăiesc sub o rocă, ce este asta?

Log4j este o librarie folosită pentru logging în aplicațiile bazate pe Java.

S-a găsit o vulnerabilitate în Apache Log4j v2 (mai exact în versiunile 2.0-beta9 până la 2.14.1) ce permite unui atacator să execute cod arbitrar pe mașina țintă dacă sistemul capturează o secvență definită de atacator (folosind JNDI și LDAP). Comenzile atacatorului sunt rulate cu aceleași permisiuni ca și aplicația Java ce a pornit Log4j.

Această vulnerabilitate a fost supranumită Log4Shell, de la Log4j și Shell, o interfață către sistemul Unix.

Cine este afectat?

Aproape toate aplicațiile au un mod de logging, fie pentru a ajuta în dezvoltarea aplicației, pentru securite sau orice altceva. Log4j este o librărie des folosită în aplicațiile Java pentru acest lucru și Java este folosit mult în companiile mari... cred că vezi unde mă duc.

Spune numele unei companii mari. Google? Au fost afectați. Microsoft? Și ei au făcut un articol. IBM? Da, articol actualizat chiar ieri (22 dec.). NVIDIA? Și la ei este la fel.

Să nu mai zic de companiile specifice networking, acces la Internet etc.: Akamai, Cloudflare, Citrix, Cisco, Oracle, mai toți au fost afectați sau, cel puțin, au făcut un articol. O listă bună pentru a înțelege acest lucru este „CheatSheet”-ul Log4Shell.

Liniștea dinaintea furtunii

imagine
Sursă: github.com

Prima idee către public a fost dată de PR-ul unui membru Apache pe GitHub, „Restrict LDAP access via JNDI. La început părea ca și un PR normal, dar este posibil ca un lucru minor să fi alertat unele persoane: fișierul JndiExploit.java. Dacă numele nu conținea exploit și jndi, era posibil ca exploit-ul să se manifesteze mai târziu. De fapt, vulnerabilitatea a fost raportată către Apache cu o jumătate de lună înainte de a fi adusă publicului, deci și acest lucru putea încetini haosul. LunaSec a publicat un articol bun despre cum să remediați vulnerabilitățile găsite într-un proiect de tip Open Source.

Primele implementări ale exploit-ului au fost făcute în Minecraft. Da, cel mai cumpărat joc, cu peste 238 milioane de vânzări, deținut de către Microsoft prin Mojang Studios. Poți vedea niște demonstrații inofensive în următoarele videoclipuri de pe YouTube: „Minecraft Log4J Exploit In Action”, „I Hacked A Computer Through Minecraft... (Log4J Exploit)”.

Ce a fost găsit până acum

Prima vulnerabilitate, despre care am scris până acum, a fost înregistrată în sistemul CVE al corporației „MITRE”. Pe lângă aceasta au mai fost descoperite încă două.

Log4j a avut următoarele ID-uri CVE:

  • CVE-2021-44228 - cu un grad de severitate „Critical”, 10, cel mai grav
  • CVE-2021-45046 - primul fix, ce nici el nu stă bine, cu o severitate „Critical” și un scor de 9/10
  • CVE-2021-45105 - severitate „High” cu un scor de 7.5/10, publicat pe 18.12.2021; sperăm să fie ultima vulnerabilitate

Remedierea vulnerabilității

Aici nu o să fac pe deșteptul și vă voi da un link la ghidul de la LunaSec. Acolo găsești sfaturi bune și resurse pentru scanarea unui sistem. De exemplu poți scana un sistem pentru a găsi dacă are o versiune veche de Log4j folosind log4j-scan.

Akamai a publicat un articol ce include o comandă simplă (ce trebuie rulată ca root sau cu sudo) pentru a vedea dacă au fost înregistrate încercări de atacare pe un sistem conectat la Internet:

egrep -i -r '\$\{jndi:(ldap[s]?|rmi|dns)://' /var/log

Cel mai bun sfat, în general, ar fi să îți actualizezi aplicațiile, fie de server, fie de desktop sau de telefon.

Ce pot face pentru a rămâne protejat în viitor?

Te poți uita în Baza de date de consiliere GitHub pentru mai toate vulnerabilitățile, Microsoft Security Response Center pentru cele specifice Microsoft. De asemenea, site-ul cvedetails.com are niște statistici interesante.

Surse și articole

Cât de aleatoriu este un lucru?

Cuvintele subliniate au explicații, țineți mouse-ul pe cuvânt pentru a vedea acestea.

Nu se poate afla. Nimic nu este cu adevărat aleatoriu. Sfârșitul articolului.

...

...

Bine, stai așa. Nu putem verifica dacă un lucru este aleatoriu sau „gradul” lui de aleatoritate, dar putem testa metoda prin care a fost produs. Pentru simplitate, acest lucru va fi un număr.

imagine
Sursă: dilbert.com

Cum poți obține un număr aleatoriu?
Subtitlu alternativ: Zona tocilarilor

1. Cum o face Linux

Dacă vrei să formezi un seed bun pentru a genera un număr și folosești un sistem bazat pe Linux ai două metode bune:

  • /dev/random
  • /dev/urandom

Nu mă crezi? Testează:

cat /dev/random

Bun, probabil că ți-am umplut terminal-ul cu o grămadă de caractere ciudate. Acele caractere nu sunt, de fapt, caractere, ci sunt date generate cu ajutorul diverselor dispozitive și module conectate la calculatorul tău, iar apoi traduse în UTF-8, ASCII sau ce metodă de codificare a caracterelor ai pe sistem. Dacă vrei să afli mai multe informații, vezi „Mituri despre /dev/urandom” de Thomas Hühn.

Structura generatorului de numere aleatorii în kernel-ul de Linux începând cu versiunea 4.8:

imagine
Sursă: 2uo.de

2. Metode convenționale și mai puțin convențional

De obicei, pentru criptografie, generarea aleatorie se realizează cu ajutorul zgomotului atmosferic sau dezintegrarea radioactivă a unui material (casiu-137, uraniu etc.). Aceste metode sunt folosite de către random.org, HotBits și chiar Cloudflare la sediul din Singapore. De ce am zis la sediul din Singapore? Fiindcă în San Francisco și Londra sunt povești diferite.

În San Francisco, a fost instalat „Zidul Entropiei” la intrarea clădirii de birouri Cloudflare:

imagine
Sursă: blog.cloudflare.com

Cu ajutorul acestui zid de veioze cu lavă, Cloudflare a creat sistemul „LavaRand”. Acesta ia informațiile generate de către o cameră îndreptată spre perete și le scrie în /dev/random. Pentru a prezice rezultatul aflat în /dev/urandom, un atacator ar trebui să fie în control asupra tuturor sistemelor/dispozitivelor ce adună informații în respectivul fișier, server-elor din clădire cât și din alte centre de date Cloudflare.

În sediul lor din Londra, au fost instalate trei pendue duble. În timp ce un singur pendul care se balansează înainte și înapoi este foarte previzibil, matematicienii au arătat că dacă luați un pendul și agățați un alt pendul de el, veți crea un sistem impredictibil.

imagine
Sursă: fastcompany.com

Testarea metodelor de generare aleatorie

Primele teste pentru numerele aleatorii au fost publicate de M.G. Kendall și Bernard Babington Smith în „Jurnalul Societății Regale de Statistică” din 1938. Acestea au fost construite pe instrumente statistice precum Testul chi-pătrat al lui Pearson care au fost dezvoltate pentru a distinge dacă fenomenele experimentale se potrivesc cu probabilitățile lor teoretice.

Cele patru teste inițiale ale lui Kendall și Smith erau următoarele, cu ideea că fiecare număr dintr-o anumită secvență aleatorie avea o șansă egală de apariție și că diferite alte tipare din date ar trebui, de asemenea, distribuite în mod echipabil:

  • test de frecvență: verificarea pentru a vă asigura că există aproximativ același număr de 0s, 1s, 2s, 3s etc.;
  • test în serie, a făcut același lucru, dar pentru secvențe de două cifre la un moment dat (00, 01, 02 etc.), comparându-și frecvențele observate cu predicțiile ipotetice în care erau distribuite în mod egal;
  • test de poker, testat pentru anumite secvențe de cinci numere la un moment dat (AAAAA, AAAAB, AAABB etc.) pe baza mâinilor din joc poker;
  • test de gol, s-au uitatu la distanțele dintre zerouri (00 ar fi o distanță de 0, 030 ar fi o distanță de 1, 02250 ar fi o distanță de 3 etc.);

Bonus

Laboratorul de cercetare Cacert are o aplicație web ce analizeaza șiruri produse de către generatoare de numere aleatorii folosind 7 teste. Poți vedea rezultatele publice aici.

De asemenea, poți vedea codus sursă a funcției random din Python, ce implementează metoda de generare Mersenne Twister.

imagine
Sursă: xkcd.com

Inspirație

Am început să scriu aceast articul pornind de la un video de pe YouTube, „Cel mai bun mod de a găsi un punct aleatoriu într-un cerc”, făcut de nubDotDev. După, mi-am adus aminte de alt videoclip, de această dată produs de Tom Scott, „Veiozele cu lavă care ajută la menținerea în siguranță a internetului”. De acolo m-am mai documentat de pe Internet, iar acesta este rezultatul.

Dacă ai supraviețuit după tot acest zid de cuvinte, vezi și alte articole pe care le-am făcut, poate îți plac.

Surse

Blog-urile: De ce? Cum? Pentru cine?

Cuvintele subliniate au explicații, țineți mouse-ul pe cuvânt pentru a vedea acestea.

Introducere. De ce ai face un blog?

Încă din înainte de a fi născut, blog-urile au fost o unelată a oamenilor pentru a-și exprima opiniile și, în general, gândurile. Trecând la prezent, blog-urile alcătuiesc o considerabilă parte a Internetului, iar dacă în trecut acestea erau doar personale sau cu scop educativ, acum există nenumărate ramuri ale conceptului standard, printre care blog-uri:

  • corporatiste, fiindcă departamentul de IT și așa nu face nimic
  • de modă; de ce nu ai vrea să afli care este culoarea anului?
  • de călătorie, pentru a sta ore întregi pe site-uri de cazări, doar ca să-ți aminteștie că încă există covrig-19
  • de bucate, când nu ai idee ce să gătești sau, mai bine zis, când nu știi cum să gătești

Am început această postare cu niște idei despre care nu toți ar aproba, dar eu cred că dacă tu, cititorul trecător, ai ajuns până aici (sau ai citit primul enunț, dar te-ai plictisit așa că te-ai uitat mai jos să vezi dacă chiar vorbesc despre ceva interesant) atunci consider această primă postare un succes. Răspunsul meu scurt pentru prima întrebare, „de ce?”, ar fi pentru o satisfacție personală; o dorință de a împărtăși niște idei, cum au făcut oamenii la începuturile Internetului.

Cum pot să fac și eu un astfel de site?

Dacă printr-un motiv extraordinar precum „nu am ce face cu timpul” sau „îmi place să împărtășesc idei (ne)interesante în siguranța WWW-ului” ai vrea să faci și tu un blog, uite cum am facut eu, după câteva ore de cercetare:

Am ales un „generator” de blog-uri mic în dimensiune, dar, în același timp, ușor și rapid pentru a scrie și pentru a publica postări: portable-php. Spre deosebire de opțiuni mai populare, precum WordPress, Blogger etc., acest CMS este extrem de simplu! Dacă ignorăm programul principal pentru a rula script-ul de generare, PHP, atunci fișierul primcipal + toate dependențele < 3500 linii de cod. Asta înseamnă de aproximativ 228 ori mai puțin decât WordPress1!

Raportul de utilizare a diverselor sisteme de gestionare a conținutului (CMS):

imagine
Sursa: w3techs.com
Gri = procentajul de utilizare absolută
Verde = cota de piață

„Dar Sabin, de ce nu ai folosit Gatsby sau Next.js?” - zise nimeni, niciodată

Ar fi mai multe motive, dar voi zice că am vrut să încerc ceva nou; să ies din zona de confort: PHP. Deși nu folosesc PHP ca pe un server web, folosesc fișiere .php, cu structură și sintaxă specifică. Prima impresie a fost că seamănă puțin cu JavaScript împreună cu jQuery și HTML, dar după m-am uitat pe documentație și am observat că nu prea e așa.

Înapoi la tutorial-ul nu chiar tutorial

După ce descarci sau clonezi repository-ul cu:

git clone https://github.com/cadars/portable-php.git

poți face postări în directorul content. Acestea sunt împărțite pe fișiere de tip Markdown, un fișier = o postare. Acest lucru ajută autorul să își scrie și să își formateze lucrările mult mai ușor, adică dacă în HTML ai scrie:

 <a href="https://example.com">Du-te pe un site</a>

atunci în Markdown vei scrie doar:

[Du-te pe un site](https://example.com)

Probabil că ai folosit Markdown fără să vrei, fie într-o postare pe un forum, pe o rețea de socializare (de exemplu Reddit) sau chiar pe GitHub.

Vorbind de GitHub

Acolo îmi țin majoritatea site-urilor publice, inclusiv acesta. Este destul de bun pentru găzduirea de website-uri statice2, ținând cont că este gratis. Nu doar lucruri ce țin de web pot fi puse, ci orice program, proiect etc. cât timp nu încalcă legea sau nu conține lecții la biologie etc.3

Bun, acum că am terminat reclama nesponsorizată, cum pui și tu ceva pe această platformă? Simplu, îți faci cont dacă nu ai deja, creezi un nou repo, activezi GH Pages fără a selecta nicio temă Jekyll și încarci fișierele de la proiectul modificat de mai sus. Site-ul tău va fi disponibil la [utilizator].github.io/[nume_repo].

Pentru cine sunt blog-urile?

Pentru aproape toți oamenii. Chiar dacă te referi la cine poate face un blog sau dacă te referi la cine poate să citească un blog, răspunsul este oricine (fără dizabilități grave).

Nu trebuie să te complici cum am făcut eu. Până la urmă, există și așa zisele „site builder-e”, la care doar muți niște elemente dintr-o parte în alta, deci dacă poți folosi un calculator cu Internet, poți să îți faci un site sau un blog. Despre audiență încă nu pot să zic nimic, dar un sfat bun este să nu pui reclame sau tracker-e de utilizatori. Nimănui nu îi place să fie urmărit, chiar dacă se află în „siguranța Internetului”.

Se zice că dacă poți face ceva bine să o faci pentru bani, dar în cazul blog-urilor cred că este recomandat dacă se rămâne doar la plăcera de a scrie și de a împărtăși informații.


  1. presupunând că WordPress are aproximativ 800000 linii de cod, vezi acest video 

  2. un site static este un site fără elemente ce depind exclusiv de un server cu (de exemplu) o bază de date, utilizatori la care se arată pagini specifice sau formulare ce nu depind de un server „third-party” etc. 

  3. acesta nu este un sfat legal, nu promit că daca pui lecții la biologie se va întâmpla ceva :) 

© Maxim Sabin 2022