Puncte:69

Cum verific dacă Log4j este instalat pe serverul meu?

drapel gq
Uri

Am citit despre vulnerabilitățile de securitate legate de Log4j.

Cum verific dacă Log4j este instalat pe serverul meu? Serverele mele specifice folosesc Ubuntu 18.04.6 LTS.

Am instalat multe pachete de la terți și poate că unele dintre ele le conțin.

Există o comandă de rulat pe serverul meu pentru a verifica dacă Log4j este instalat?

drapel ch
Rețineți că aceasta este o bibliotecă Java, așa că dacă nu rulați nicio aplicație Java (și, prin extensie, dacă nu aveți Java instalat), sunteți în siguranță.
mfinni avatar
drapel cn
Nu este adevărat - aplicațiile pot veni cu propriul lor JRE, nu trebuie să aveți instalat Java pe sistemul dvs. pentru a rula aplicații Java.
Puncte:48
drapel ua

Încercați acest script pentru a obține un indiciu:

echo „se verifică vulnerabilitatea log4j...”
OUTPUT="$(locate log4j|grep -v log4js)"
if [ "$OUTPUT" ]; atunci
  echo „[AVERTISMENT] poate vulnerabil, acele fișiere conțin numele:”
  echo „$OUTPUT”
fi
OUTPUT="$(dpkg -l|grep log4j|grep -v log4js)"
if [ "$OUTPUT" ]; atunci
  echo „[AVERTISMENT] poate vulnerabili, pachete instalate dpkg:”
  echo „$OUTPUT”
fi
if [ "$(comanda -v java)" ]; atunci
  echo „java este instalat, deci rețineți că aplicațiile Java își grupează adesea bibliotecile în interiorul fișierelor jar/war/ear, deci ar putea exista încă log4j în astfel de aplicații.”
fi
echo "Dacă nu vedeți nicio ieșire deasupra acestei linii, sunteți în siguranță. În caz contrar, verificați fișierele și pachetele enumerate."

Asigurați-vă că baza de date de localizare este actualizată actualizatb.

Sau mai bine verificați și rulați script îmbunătățit de la GitHub care caută, de asemenea, în fișierele Java împachetate. Alerga într-o linie cu

wget https://raw.githubusercontent.com/rubo77/log4j_checker_beta/main/log4j_checker_beta.sh -q -O - | bash   

Totuși, nu sunt sigur dacă ar putea exista programe Java compilate care rulează pe server fără ca java să fie instalat?

Sau chiar versiuni compilate în care fișierele sursă nici măcar nu se mai găsesc în arhivele împachetate?


Există, de asemenea, multă dezvoltare GitHub, unde găsești atacuri și contramăsuri.


Acest lucru ia prea mult timp pentru mine. Caut pe cineva care să-i transfere dreptul de proprietate asupra depozitului de pe GitHub

drapel in
Acesta are aceleași avertismente ca și răspunsul oferit de Tero Kilkanen. Și doar pentru că Java nu este pe calea care nu asigură că nu este instalat.
Uri avatar
drapel gq
Uri
Acest lucru funcționează pentru mine. log4j nu este instalat pe serverele mele. Deși este posibil să fi instalat o aplicație care să o folosească, șansele sunt mici.
drapel ch
Despre programele Java compilate: da, ar putea fi cu GraalVM / Quarkus / Micronaut / Spring Native și așa. Totuși, nu sunt sigur dacă Log4J este compatibil cu versiunile native.
user3067860 avatar
drapel ng
@Uri Sunt șanse _foarte, foarte mari_ să fi instalat o aplicație care folosește log4j. Log4j este foarte, foarte comun în lumea Java și Java este un limbaj foarte, foarte comun.
drapel in
Mă distrează să caut exemple ale unei vulnerabilități care permite executarea de scripturi aleatorii la distanță cu o linie de bash care rulează un script la distanță aleatoriu.
drapel ua
Sigur, nu introduceți niciodată codul neverificat în shell - citiți scriptul în prealabil fără `| bash` !!!
drapel id
> Nu sunt sigur dacă ar putea exista programe Java compilate care rulează pe server fără ca java să fie instalat. Sigur că se poate. Ați auzit vreodată de JRE pachet?
Gerrit avatar
drapel cn
Lunasec are informații excelente. Ei au publicat, de asemenea, hashuri ale claselor binare vulnerabile log4j, astfel încât să puteți scana fișierele .jar și .war pentru ele. https://www.lunasec.io/docs/blog/log4j-zero-day-mitigation-guide/
drapel tr
locate ar putea folosi date învechite, mai întâi ar trebui să executați updatedb
Gerrit avatar
drapel cn
Dacă o aplicație compilează clasele la runtine dintr-o sursă nemarcată, sau este obfuscata comercial sau încarcă clase cu un încărcător de clasă la distanță, atunci va trebui să utilizați canarytokens sau ceva asemănător și să sperați că, prin fuzzing intrarea, veți găsi orice instanță log4j.
drapel ua
**Acest lucru necesită prea mult timp pentru mine. Caut pe cineva care să-i transfere dreptul de proprietate asupra depozitului de pe GitHub**
drapel es
Rețineți că doar căutarea numelor de fișiere care conțin `log4j` va da un număr de fals pozitive, în special log4j 1.x sau `log4j-over-slf4j`, care nu au nimic de-a face cu această vulnerabilitate în Log4j 2.x (mai precis `log4j-core` între versiunile 2.0 și 2.15).
Puncte:26
drapel in

Nu există nicio comandă care să-ți spună cu siguranță asta. Unele aplicații livrează bibliotecile pe care le folosesc direct ca fișier jar, altele le vor conține într-o arhivă.

Și chiar și atunci nu știți ce versiune este livrată și cum este folosită. Singura modalitate de a fi sigur că atenuați CVE este să citiți anunțurile de securitate și notele de lansare ale aplicațiilor dvs. și să urmați recomandările acestora.

Puncte:10
drapel jp

Încercați aceste comenzi:

  • dpkg -l | grep liblog4j

  • dpkg -l | grep log4

  • găsi / -name log4j-core-*.jar

  • localiza log4j | grep -v log4js

drapel cn
este `log4js` din ultima linie o greșeală de tipar?
grofte avatar
drapel us
Ar trebui să fac `find / -name log4j-core-*.jar 2>/dev/null` sau să folosesc sudo/root?
drapel cn
@JanDorniak nu cred că este. Ideea lor este să găsească toate mențiunile `log4j`, dar să excludă `log4js`.
drapel cn
@GrzegorzOledzki lipsa de somn.... Am ratat `-v`
dustbuster avatar
drapel nf
Am făcut acest lucru `find / -name *log4j*` și am folosit compozitorul ca control: `find / -name *composer*` și a găsit fiecare fișier cu acel nume în el.
Puncte:5
drapel in
yun

Am scris acest script Python pentru a găsi versiuni vulnerabile Log4j2 pe sistemul dvs.: https://github.com/fox-it/log4j-finder

Funcționează prin scanarea discului și în interiorul fișierelor Java Archive în mod recursiv și căutând fișiere defecte cunoscute.

Gerrit avatar
drapel cn
Recomand personal asta. Cod ușor de inspectat și funcționează recursiv pe arhive.
drapel bm
Deși este frumos, funcționează pentru totdeauna pe mașina mea. Nu stiu daca este normal
Gerrit avatar
drapel cn
Ați încercat să rulați dacă cu -v și/sau un arbore de directoare limitat? Dacă aveți o unitate de rețea atașată, ar putea cauza probleme.
Puncte:4
drapel cn

log4jscanner

Publicat de Google sub licența Apache-2.0, log4jscanner este un scanner de sistem de fișiere cu vulnerabilități log4j și un pachet Go pentru analiza fișierelor JAR.

Puncte:3
drapel cn

Cerându-mi scuze pentru referirea la material din exterior, sper că acest lucru va fi tolerabil în circumstanțele actuale.

Informațiile pe care Lunasec.io le-a publicat despre hash-uri ale fișierelor vulnerabile Java binare .class:

https://github.com/lunasec-io/lunasec/blob/master/tools/log4shell/constants/vulnerablehashes.go

Vezi si blogul lor: https://www.lunasec.io/docs/blog/log4j-zero-day-mitigation-guide/

Ar trebui să ai ordonat hashe-uri (unul pe linie) ale claselor suspecte dintr-un fișier hashuri și au un fișier jar subiect.jar și au dezarhivați, găsi și sha256sum comenzi, apoi puteți face o comparație cu hashurile cunoscute cu:

JARFILE=subject.jar; DIROUT=$(mktemp -d); dezarhivați -qq -DD "$JARFILE" '*.class' -d "$DIROUT" && găsiți "$DIROUT" -type f -not -name "*"$'\n'"*" -name '*.class ' -exec sha256sum "{}" \; | tăiați -d" " -f1 | sortare | uniq > „$JARFILE”-hash-uri; rm -rf -- "$DIROUT"

comm -12 hashuri subiect.jar-hashes

Dacă com are ieșire, atunci există un hash potrivit.

Gerrit avatar
drapel cn
@rubo77, tocmai am făcut-o.
drapel ua
mulțumesc pentru PR la https://github.com/rubo77/log4j_checker_beta/pull/6
drapel bm
putem folosi acest https://github.com/mubix/CVE-2021-44228-Log4Shell-Hashes/blob/main/sha256sums.txt direct? Mulțumesc pentru PR
Gerrit avatar
drapel cn
Nu, acestea sunt hash-uri ale fișierelor jar, aveți nevoie de hash-uri ale fișierelor .class pentru verificarea clasei. Pot sugera aceasta: https://github.com/nccgroup/Cyber-Defence/blob/master/Intelligence/CVE-2021-44228/modified-classes/sha256sum.txt
Gerrit avatar
drapel cn
Ar trebui să subliniez că verificarea amprentelor digitale la primul nivel este destul de inutilă pentru verificarea fișierelor WAR. Ar trebui să le despachetați în prealabil. Probabil și urechea, dar de două ori. Unele fișiere jar pot conține și alte fișiere jar ca resurse. Desigur, WAR și EAR trăiesc probabil dezambalate și pe același sistem de fișiere.
Puncte:3
drapel br

Încerca syft. Acesta creează o listă de materiale software (SBOM), pe care apoi o puteți căuta versiuni vechi log4j (chiar funcționează cu imagini docker).

Ceva asemănător cu syft dir:/opt/foo-application | grep log4j căutări în implementări convenționale. syft dir:/ | grep log4j ar trebui să funcționeze pentru întregul tău server.

Transmiterea imaginilor docker funcționează și:

# syft -q jacobalberty/unifi:5.13.29 | grep log4j
log4j-api 2.12.1 java-archive
log4j-core 2.12.1 java-archive
log4j-slf4j-impl 2.12.1 java-archive
tomcat-embed-logging-log4j 8.5.2 java-archive

Crearea unui script pentru a transmite toate imaginile docker către syft nu ar trebui să fie prea grea, dar s-ar putea să găsiți ceva inspirație în acele scripturi ale mele: https://github.com/debuglevel/syft-grype-utils

drapel cn
Aruncă o privire și pe Grype -- https://github.com/anchore/grype -- de către aceleași persoane. Acesta încorporează Syft și listează vulnerabilitățile cunoscute de CVE, așa că vă va spune direct dacă sistemul dvs. este vulnerabil.
Puncte:2
drapel gb

John Hammond a publicat împreună cu alții un serviciu de redirecționare LDAP găzduit, astfel încât să puteți sări peste toate prostiile. https://log4shell.huntress.com/

Direcțiile sunt simple - generează un ID de client pentru dvs. (este în URL, precum și o parte din șirul de injectare) pe care îl puteți posta în orice formular/cerere/sau derivat al cererii web.

În general, dacă rulați ceva care „nu funcționează cu asta pentru că este acces local”, atunci ești bine oricum, deoarece nu există mijloace de redirecționare prin aplicația ta bazată pe Java.

De notat - cred că cea mai mare preocupare ar trebui pusă la hardware-ul de management al rețelei L2/L3; Mai ales dacă aveți de-a face cu un ISP sau conținutul dvs. este servit printr-un serviciu de găzduire.

Elysiumplain avatar
drapel gb
Nici măcar nu mă faceți să încep cu injecția întârziată de ransomware de la un serviciu de găzduire pwnd care doar servește malware încorporat în conținutul solicitat.
drapel cu
Sursa este disponibilă aici. Rulați întregul serviciu pe propria mașină: https://github.com/huntresslabs/log4shell-tester
Puncte:1
drapel br

Toate încercările aici de a aborda vulnerabilitățile din log4j sunt insuficiente. Nu te poți baza pe localiza comandă, deoarece arată doar într-un set de căi configurate (/etc/updatedb.conf pe Debian).

Software-ul se poate instala singur în locații care nu sunt configurate în updatedb.conf și să fie complet ratat de jobul cron care actualizează baza de date de localizare.

De asemenea, se descoperă că furnizorii de software (cum ar fi Elastic) au reambalat vulnerabilul JndiLookup.class (de exemplu: elasticsearch-sql-cli-7.16.1.jar) în locuri care nu erau cunoscute anterior, ceea ce lasă soluțiile incomplete care sunt construite în jurul hashurilor, numelor sau căilor de fișiere cunoscute.

@shodanshok este pe calea cea bună aici, dar mai degrabă decât să caute log4j în mod explicit, o privire în fiecare „.jar” de pe sistem este ceea ce este necesar.

Acesta este mai complet, necesită pachetul zip. și o extensie a răspunsului lui shodanshok. Aceasta va afișa doar locațiile în care JndiLookup.class codul este găsit. Ar putea fi adăugată o altă linie pentru a elimina aceste vulnerabilități, dar mai degrabă aș lăsa asta la discreția administratorului. Linkul elastic de mai sus arată cum:

pentru jar în $(găsește / -name '*.jar'); do
   dezarhivați -l „$jar” | grep 'JndiLookup.class' &>/dev/null && echo „Vulnerabilitate găsită în $jar”
Terminat

Exemplu:

# pentru jar în $(găsește / -nume '*.jar'); do
> dezarhivați -l „$jar” | grep 'JndiLookup.class' &>/dev/null && echo „Vulnerabilitate găsită în $jar”
> gata
S-a găsit o vulnerabilitate în /usr/lib/unifi/lib/log4j-core-2.13.3.jar
S-a găsit o vulnerabilitate în /home/minecraft/.m2/repository/org/spigotmc/minecraft-server/1.15.2-SNAPSHOT/minecraft-server-1.15.2-SNAPSHOT.jar
S-a găsit o vulnerabilitate în /home/minecraft/.m2/repository/org/spigotmc/minecraft-server/1.15.1-SNAPSHOT/minecraft-server-1.15.1-SNAPSHOT.jar
...

Aveți grijă când rulați acest lucru pe un sistem cu sisteme de fișiere de rețea montate, deoarece performanța poate fi afectată. În aceste cazuri, trebuie să rulați comenzile pe serverul de fișiere însuși.

Puncte:1
drapel ca

Verificarea pachetelor instalate nu este suficientă log4j poate fi instalat manual de către alte aplicații.

Pentru serverele Linux folosesc următoarele: găsi / -iname „*log4j*.jar”

Pentru serverele Windows se poate folosi ceva similar cu asta: dir C:\*log4j*.jar /s (schimbându-se C: la D: și așa mai departe pentru alte discuri).

Numele de fișiere vor afișa în general versiunea bibliotecii, dar pentru a verifica de două ori puteți deschide fișierul manifest și puteți citi câmpurile versiune/implementare.

Vă rugăm să rețineți că cele de mai sus sunt nu e suficient a prinde încorporat log4j (ex: în alte fișiere jar). Pentru acestea, trebuie să grepți șirul relevant, dar acest lucru necesită destul de mult timp și resurse, așa că vă sugerez să mergeți cu căutarea fișierelor ca prim pas (dar incomplet).

drapel ua
Lipsește ceva din scriptul de la https://github.com/rubo77/log4j_checker_beta din răspunsul acceptat?
shodanshok avatar
drapel ca
@rubo77 nu, dar nu toată lumea ce să ruleze un script github aleatoriu pe un server esențial.
drapel ua
nu este întâmplător, uită-te la asta, nu se întâmplă mare lucru în scenariu și este ușor de înțeles
Puncte:0
drapel cn

lsof verifică fișierele deschise, postate de Florian Roth pe twitter:

ps aux | egrep „[l]og4j”
lsof | grep log4j

alte două comenzi, de asemenea, dar acestea sunt comenzile rezidente, de căutare în memorie

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.