Score:69

ฉันจะตรวจสอบว่ามีการติดตั้ง Log4j บนเซิร์ฟเวอร์ของฉันได้อย่างไร?

ธง gq
Uri

ฉันได้อ่านเกี่ยวกับช่องโหว่ด้านความปลอดภัยที่เกี่ยวข้องกับ Log4j

ฉันจะตรวจสอบว่ามีการติดตั้ง Log4j บนเซิร์ฟเวอร์ของฉันได้อย่างไร? เซิร์ฟเวอร์เฉพาะของฉันใช้ อูบุนตู 18.04.6 LTS.

ฉันได้ติดตั้งแพ็คเกจของบุคคลที่สามจำนวนมากและบางแพ็คเกจอาจมีอยู่ในนั้น

มีคำสั่งให้รันบนเซิร์ฟเวอร์เพื่อตรวจสอบว่าติดตั้ง Log4j หรือไม่

ch flag
โปรดทราบว่านี่คือไลบรารี Java ดังนั้นหากคุณไม่ได้ใช้งานแอปพลิเคชัน Java ใดๆ (และโดยส่วนขยาย หากคุณไม่ได้ติดตั้ง Java) คุณจะปลอดภัย
mfinni avatar
cn flag
ไม่จริง - แอปพลิเคชันสามารถมาพร้อมกับ JRE ของตัวเองได้ คุณไม่จำเป็นต้องติดตั้ง Java บนระบบของคุณเพื่อใช้งานแอปพลิเคชัน Java
Score:48
ธง ua

ลองใช้สคริปต์นี้เพื่อรับคำแนะนำ:

echo "กำลังตรวจสอบช่องโหว่ log4j..."
OUTPUT="$(ค้นหาตำแหน่ง log4j|grep -v log4js)"
ถ้า [ "$OUTPUT" ]; แล้ว
  echo "[คำเตือน] อาจมีช่องโหว่ ไฟล์เหล่านั้นมีชื่อ:"
  เสียงสะท้อน "$OUTPUT"
ไฟ
OUTPUT="$(dpkg -l|grep log4j|grep -v log4js)"
ถ้า [ "$OUTPUT" ]; แล้ว
  echo "[คำเตือน] อาจมีช่องโหว่ แพ็คเกจที่ติดตั้ง dpkg:"
  เสียงสะท้อน "$OUTPUT"
ไฟ
ถ้า [ "$(คำสั่ง -v java)" ]; แล้ว
  echo "ติดตั้ง java แล้ว ดังนั้นโปรดทราบว่าแอปพลิเคชัน Java มักจะรวมไลบรารีของพวกเขาไว้ในไฟล์ jar/war/ear ดังนั้นจึงยังคงมี log4j ในแอปพลิเคชันดังกล่าว"
ไฟ
echo "ถ้าคุณไม่เห็นเอาต์พุตเหนือบรรทัดนี้ แสดงว่าคุณปลอดภัยแล้ว มิฉะนั้น ให้ตรวจสอบไฟล์และแพ็คเกจที่แสดงรายการ"

ตรวจสอบให้แน่ใจว่าฐานข้อมูลตำแหน่งของคุณเป็นปัจจุบันด้วย อัพเดทb.

หรือดีกว่าตรวจสอบและเรียกใช้ สคริปต์ที่ได้รับการปรับปรุงจาก GitHub ที่ ค้นหาภายในไฟล์ Java ที่บรรจุด้วย. วิ่งเป็นเส้นเดียวกับ

wget https://raw.githubusercontent.com/rubo77/log4j_checker_beta/main/log4j_checker_beta.sh -q -O - | ทุบตี   

ฉันไม่แน่ใจว่าอาจมีโปรแกรม Java ที่คอมไพล์แล้วทำงานบนเซิร์ฟเวอร์โดยไม่ต้องติดตั้งจาวาหรือไม่

หรือแม้แต่เวอร์ชันที่คอมไพล์แล้วซึ่งไม่พบไฟล์ต้นฉบับในไฟล์เก็บถาวรที่อัดแน่นอีกต่อไป


ยังมีการพัฒนาอีกมาก GitHubที่คุณพบการโจมตีและมาตรการตอบโต้


สิ่งนี้ต้องใช้เวลามากสำหรับฉัน ฉันกำลังมองหาคนที่ฉันสามารถโอนความเป็นเจ้าของพื้นที่เก็บข้อมูลบน GitHub

in flag
สิ่งนี้มีข้อแม้เช่นเดียวกับคำตอบของ Tero Kilkanen และเพียงเพราะ Java ไม่ได้อยู่ในเส้นทางที่ไม่แน่ใจว่าไม่ได้ติดตั้งไว้
Uri avatar
gq flag
Uri
สิ่งนี้ใช้ได้สำหรับฉัน ไม่ได้ติดตั้ง log4j บนเซิร์ฟเวอร์ของฉัน แม้ว่าจะเป็นไปได้ว่าฉันติดตั้งแอปพลิเคชันที่ใช้งานอยู่ แต่โอกาสก็น้อย
ch flag
เกี่ยวกับโปรแกรม Java ที่คอมไพล์: ใช่ อาจมีกับ GraalVM / Quarkus / Micronaut / Spring Native เป็นต้น ฉันไม่แน่ใจว่า Log4J เข้ากันได้กับเนทีฟบิลด์หรือไม่
user3067860 avatar
ng flag
@Uri มีโอกาส _very สูงมาก_ ที่คุณได้ติดตั้งแอปพลิเคชันที่ใช้ log4j Log4j เป็นภาษาที่ใช้กันทั่วไปมากในโลกของ Java และ Java เป็นภาษาที่ใช้กันมาก
in flag
ฉันรู้สึกขบขันในการค้นหาอินสแตนซ์ของช่องโหว่ที่อนุญาตให้เรียกใช้สคริปต์ระยะไกลแบบสุ่มด้วยบรรทัดของ bash ที่เรียกใช้สคริปต์ระยะไกลแบบสุ่ม
ua flag
แน่นอน อย่าใส่รหัสที่ไม่ได้ตรวจสอบลงในเชลล์ - อ่านสคริปต์ล่วงหน้าโดยไม่ต้องใช้ `| ทุบตี ` !!!
id flag
> ฉันไม่แน่ใจว่าอาจมีการคอมไพล์โปรแกรมจาวาที่ทำงานบนเซิร์ฟเวอร์โดยไม่ได้ติดตั้งจาวา แน่นอนว่าสามารถทำได้ เคยได้ยินเกี่ยวกับ JRE ที่แถมมาหรือไม่?
Gerrit avatar
cn flag
Lunasec มีข้อมูลที่ยอดเยี่ยม พวกเขายังได้เผยแพร่แฮชของคลาสไบนารี log4j ที่มีช่องโหว่ เพื่อให้คุณสามารถสแกนไฟล์ .jar และ .war สำหรับพวกเขา https://www.lunasec.io/docs/blog/log4j-zero-day-mitigation-guide/
tr flag
locate อาจใช้ข้อมูลที่ล้าสมัย คุณควรรัน updatedb ก่อน
Gerrit avatar
cn flag
หากแอปพลิเคชันคอมไพล์คลาสที่รันไทน์จากแหล่งที่ไม่มีเครื่องหมาย หรือถูกทำให้ยุ่งเหยิงในเชิงพาณิชย์หรือโหลดคลาสด้วยตัวโหลดคลาสระยะไกล คุณจะต้องใช้ canarytokens หรืออะไรทำนองนั้น และหวังว่าการฟัซอินพุตคุณจะพบอินสแตนซ์ log4j ใดๆ
ua flag
**มันต้องใช้เวลามากสำหรับฉัน ฉันกำลังมองหาคนที่ฉันสามารถโอนความเป็นเจ้าของพื้นที่เก็บข้อมูลบน GitHub**
es flag
โปรดทราบว่าเพียงแค่มองหาชื่อไฟล์ที่มี `log4j` จะทำให้เกิดผลบวกปลอมจำนวนหนึ่ง โดยเฉพาะอย่างยิ่ง log4j 1.x หรือ `log4j-over-slf4j` ซึ่งไม่มีส่วนเกี่ยวข้องกับช่องโหว่นี้ใน Log4j 2.x (โดยเจาะจงมากขึ้น `log4j-core` ระหว่างเวอร์ชัน 2.0 และ 2.15)
Score:26
ธง in

ไม่มีคำสั่งใดที่จะบอกคุณได้อย่างแน่นอน แอปพลิเคชั่นบางตัวส่งไลบรารีที่พวกเขาใช้โดยตรงเป็นไฟล์ jar บางตัวจะบรรจุไว้ในไฟล์เก็บถาวร

และถึงอย่างนั้นคุณก็ยังไม่รู้ว่ามีการจัดส่งเวอร์ชันใดและใช้งานอย่างไร วิธีเดียวที่จะแน่ใจได้ว่าคุณลด CVE ลงคืออ่านประกาศด้านความปลอดภัยและบันทึกประจำรุ่นของแอปพลิเคชันของคุณ และปฏิบัติตามคำแนะนำของพวกเขา

Score:10
ธง jp

ลองคำสั่งนี้:

  • dpkg -l | grep liblog4j

  • dpkg -l | grep log4

  • ค้นหา / -ชื่อ log4j-core-*.jar

  • ค้นหา log4j | grep -v log4js

cn flag
`log4js` ในบรรทัดสุดท้ายพิมพ์ผิดหรือเปล่า
grofte avatar
us flag
ฉันควรทำ `find / -name log4j-core-*.jar 2>/dev/null` หรือใช้ sudo/root
cn flag
@JanDorniak ฉันไม่คิดว่าเป็น แนวคิดของพวกเขาคือค้นหาการกล่าวถึง `log4j` ทั้งหมด แต่ไม่รวม `log4js`
cn flag
@GrzegorzOledzki อดนอน.... ฉันคิดถึง `-v`
dustbuster avatar
nf flag
ฉันทำสิ่งนี้ `find / -name *log4j*` และฉันใช้ผู้แต่งเป็นตัวควบคุม: `find / -name *composer*` และพบทุกไฟล์ที่มีชื่อนั้นอยู่ในนั้น
Score:5
ธง in
yun

ฉันเขียนสคริปต์ Python นี้เพื่อค้นหาเวอร์ชัน Log4j2 ที่มีช่องโหว่ในระบบของคุณ: https://github.com/fox-it/log4j-finder

ทำงานโดยการสแกนดิสก์และภายในไฟล์ Java Archive ซ้ำๆ และค้นหาไฟล์ที่รู้จักเสีย

Gerrit avatar
cn flag
ส่วนตัวแนะนำตัวนี้ โค้ดที่ตรวจสอบได้ง่ายและทำงานแบบเรียกซ้ำบนคลังข้อมูล
bm flag
แม้ว่ามันจะดี แต่มันก็ทำงานตลอดไปในเครื่องของฉัน ไม่รู้ว่าปกติหรือเปล่า
Gerrit avatar
cn flag
คุณลองเรียกใช้ if ด้วย -v และ/หรือแผนผังไดเร็กทอรีที่จำกัดหรือไม่ หากคุณต่อไดรฟ์เครือข่ายไว้ อาจทำให้เกิดปัญหาได้
Score:4
ธง cn

log4jscanner

เผยแพร่โดย Google ภายใต้สิทธิ์การใช้งาน Apache-2.0 log4jscanner เป็นเครื่องสแกนระบบไฟล์ช่องโหว่ log4j และแพ็คเกจ Go สำหรับวิเคราะห์ไฟล์ JAR

Score:3
ธง cn

ขออภัยสำหรับการอ้างอิงเนื้อหาภายนอก ฉันหวังว่าสิ่งนี้จะยอมรับได้ในสถานการณ์ปัจจุบัน

ข้อมูลที่ Lunasec.io เปิดเผยเกี่ยวกับแฮชของไฟล์ Java .class แบบไบนารีที่มีช่องโหว่:

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

ดูบล็อกของพวกเขาด้วย: https://www.lunasec.io/docs/blog/log4j-zero-day-mitigation-guide/

คุณควรจะมี สั่ง แฮช (หนึ่งรายการต่อบรรทัด) ของคลาสที่น่าสงสัยในไฟล์ กัญชา และมีไฟล์ jar เรื่องขวด และมี เปิดเครื่องรูด, หา และ sha256sum คำสั่ง จากนั้นคุณสามารถเปรียบเทียบกับแฮชที่รู้จักด้วย:

JARFILE=subject.jar; DIROUT=$(mktemp -d); unzip -qq -DD "$JARFILE" '*.class' -d "$DIROUT" && ค้นหา "$DIROUT" -type f -not -name "*"$'\n'"*" -name '*.class ' -exec sha256sum "{}" \; | ตัด -d" " -f1 | จัดเรียง | uniq > "$JARFILE"-แฮช; rm -rf -- "$DIROUT"

comm -12 แฮช subject.jar-แฮช

ถ้า การสื่อสาร มีเอาต์พุตแล้วมีแฮชที่ตรงกัน

Gerrit avatar
cn flag
@ rubo77 ฉันเพิ่งทำไป
ua flag
ขอบคุณสำหรับการประชาสัมพันธ์ที่ https://github.com/rubo77/log4j_checker_beta/pull/6
bm flag
เราสามารถใช้ https://github.com/mubix/CVE-2021-44228-Log4Shell-Hashes/blob/main/sha256sums.txt โดยตรงได้หรือไม่ ขอบคุณสำหรับการประชาสัมพันธ์ของคุณ
Gerrit avatar
cn flag
ไม่ สิ่งเหล่านี้คือแฮชของไฟล์ jar คุณต้องมีแฮชของไฟล์ .class สำหรับการตรวจสอบคลาส ฉันแนะนำสิ่งนี้ได้: https://github.com/nccgroup/Cyber-Defence/blob/master/Intelligence/CVE-2021-44228/modified-classes/sha256sum.txt
Gerrit avatar
cn flag
ฉันควรชี้ให้เห็นว่าการตรวจสอบลายนิ้วมือในระดับแรกนั้นค่อนข้างไร้ประโยชน์สำหรับการตรวจสอบไฟล์ WAR คุณควรแกะกล่องเหล่านั้นออกก่อน EAR อาจเช่นกัน แต่ทวีคูณ ไฟล์ jar บางไฟล์สามารถมีไฟล์ jar อื่นเป็นทรัพยากรได้ แน่นอนว่า WAR และ EAR อาจใช้งานไม่ได้อยู่ในระบบไฟล์เดียวกันด้วย
Score:3
ธง br

พยายาม ซิฟต์. มันสร้างรายการวัสดุซอฟต์แวร์ (SBOM) ซึ่งคุณสามารถค้นหารุ่น log4j เก่าได้ (ใช้งานได้กับอิมเมจนักเทียบท่า)

สิ่งที่ต้องการ syft dir:/opt/foo-application | grep log4j ค้นหาในการใช้งานทั่วไป syft dir:/ | grep log4j ควรใช้งานได้กับทั้งเซิร์ฟเวอร์ของคุณ

การส่งผ่านอิมเมจนักเทียบท่าของคุณก็ใช้งานได้เช่นกัน:

# syft -q jacobalberty/unifi:5.13.29 | grep log4j
log4j-api 2.12.1 java-เก็บถาวร
log4j-core 2.12.1 java-เก็บถาวร
log4j-slf4j-impl 2.12.1 java-เก็บถาวร
Tomcat-embed-logging-log4j 8.5.2 java-เก็บถาวร

การสร้างสคริปต์เพื่อส่งอิมเมจนักเทียบท่าทั้งหมดของคุณไปยัง syft ไม่ควรยากเกินไป แต่คุณอาจพบแรงบันดาลใจในสคริปต์ของฉัน: https://github.com/debuglevel/syft-grype-utils

cn flag
ลองดูที่ Grype - https://github.com/anchore/grype - โดยคนเดียวกัน มันฝัง Syft และแสดงรายการช่องโหว่ที่รู้จักโดย CVE ดังนั้นจะบอกคุณโดยตรงว่าระบบของคุณมีช่องโหว่หรือไม่
Score:2
ธง gb

John Hammond เผยแพร่บริการเปลี่ยนเส้นทาง LDAP ที่โฮสต์ร่วมกับคนอื่น ๆ เพื่อให้คุณสามารถข้ามเรื่องไร้สาระทั้งหมดได้ https://log4shell.huntress.com/

คำแนะนำนั้นง่ายมาก - ระบบจะสร้างรหัสไคลเอ็นต์ให้คุณ (อยู่ใน URL และเป็นส่วนหนึ่งของสตริงการฉีด) ซึ่งคุณสามารถโพสต์ไปยังแบบฟอร์ม/คำขอ/หรืออนุพันธ์ของคำขอเว็บ

โดยทั่วไป หากคุณกำลังเรียกใช้สิ่งใดที่ "ใช้ไม่ได้กับสิ่งนี้เนื่องจากเป็นการเข้าถึงภายในเครื่อง" คุณก็ไม่เป็นไร เพราะไม่มีวิธีการส่งต่อผ่านแอปพลิเคชันที่ใช้จาวาของคุณ

ข้อควรทราบ - ฉันเชื่อว่าข้อกังวลส่วนใหญ่ควรอยู่ที่ฮาร์ดแวร์การจัดการเครือข่าย L2/L3; โดยเฉพาะอย่างยิ่งหากคุณติดต่อกับ ISP หรือเนื้อหาของคุณให้บริการผ่านบริการโฮสติ้ง

Elysiumplain avatar
gb flag
อย่าแม้แต่จะให้ฉันเริ่มด้วยการฉีดแรนซัมแวร์ที่ล่าช้าจากบริการโฮสติ้ง pwnd เพียงแค่ให้บริการมัลแวร์ที่ฝังอยู่ในเนื้อหาที่ร้องขอ
cu flag
แหล่งที่มามีอยู่ที่นี่ เรียกใช้บริการทั้งหมดบนเครื่องของคุณเอง: https://github.com/huntresslabs/log4shell-tester
Score:1
ธง ca

การตรวจสอบแพ็คเกจที่ติดตั้งไม่เพียงพอ log4j สามารถติดตั้งด้วยตนเองโดยแอปพลิเคชันอื่น

สำหรับเซิร์ฟเวอร์ Linux ฉันใช้สิ่งต่อไปนี้: ค้นหา / -ชื่อ "*log4j*.jar"

สำหรับเซิร์ฟเวอร์ Windows สามารถใช้สิ่งที่คล้ายกันได้: ผู้อำนวยการ C:\*log4j*.jar /s (การเปลี่ยนแปลง ค: ถึง ง: และอื่น ๆ สำหรับดิสก์อื่น ๆ )

โดยทั่วไปชื่อไฟล์จะแสดงเวอร์ชันของไลบรารี แต่หากต้องการตรวจสอบอีกครั้ง คุณสามารถเปิดไฟล์รายการและอ่านฟิลด์เวอร์ชัน/การใช้งาน

โปรดทราบว่าข้างต้นคือ ไม่เพียงพอ เพื่อจับฝังตัว log4j (เช่น: ในไฟล์ jar อื่นๆ) สำหรับสิ่งเหล่านี้ต้อง grep สตริงที่เกี่ยวข้อง แต่นี่ค่อนข้างใช้เวลาและทรัพยากรมาก ดังนั้นฉันขอแนะนำให้ใช้การค้นหาไฟล์เป็นขั้นตอนแรก (แต่ไม่สมบูรณ์)

ua flag
มีบางอย่างขาดหายไปในสคริปต์จาก https://github.com/rubo77/log4j_checker_beta ในคำตอบที่ยอมรับหรือไม่
shodanshok avatar
ca flag
@rubo77 ไม่ แต่ไม่ใช่ทุกคนที่จะเรียกใช้สคริปต์ github แบบสุ่มบนเซิร์ฟเวอร์ที่มีความสำคัญต่อภารกิจ
ua flag
มันไม่ได้สุ่ม ดูมันไม่มีอะไรเกิดขึ้นมากมายในสคริปต์และมันเข้าใจง่าย
Score:1
ธง br

ความพยายามทั้งหมดที่นี่เพื่อแก้ไขช่องโหว่ใน log4j นั้นสั้น คุณไม่สามารถพึ่งพา ค้นหา คำสั่งเนื่องจากจะดูในชุดของเส้นทางที่กำหนดค่าเท่านั้น (/etc/updatedb.conf บนเดเบียน)

ซอฟต์แวร์สามารถติดตั้งตัวเองในตำแหน่งที่ไม่ได้กำหนดค่าไว้ อัปเดตb.conf และพลาดงาน cron ซึ่งอัปเดตฐานข้อมูลตำแหน่ง

นอกจากนี้ยังมีการค้นพบว่าผู้จำหน่ายซอฟต์แวร์ (เช่น ยืดหยุ่น) ได้บรรจุใหม่ JndiLookup.class ที่มีช่องโหว่ (เช่น: elasticsearch-sql-cli-7.16.1.jar) ในตำแหน่งที่ไม่รู้จักมาก่อนซึ่งทำให้โซลูชันไม่สมบูรณ์ซึ่งสร้างขึ้นโดยใช้แฮช ชื่อ หรือพาธของไฟล์ที่รู้จัก

@shodanshok อยู่บนเส้นทางที่ถูกต้อง แต่แทนที่จะค้นหา log4j อย่างชัดเจน การดูใน '.jar' ทุกอันในระบบเป็นสิ่งที่จำเป็น

สมบูรณ์กว่านี้ต้องใช้ซองซิป และส่วนขยายของคำตอบของ shodanshok นี่จะแสดงเฉพาะสถานที่ที่ JndiLookup.คลาส พบรหัส สามารถเพิ่มบรรทัดอื่นเพื่อลบช่องโหว่เหล่านี้ได้ แต่ฉันอยากให้ดุลยพินิจของผู้ดูแลระบบ ลิงก์ยืดหยุ่นด้านบนแสดงวิธีการ:

สำหรับ jar ใน $(find / -name '*.jar'); ทำ
   เปิดเครื่องรูด -l "$jar" | grep 'JndiLookup.class' &>/dev/null && echo "พบช่องโหว่ใน $jar"
เสร็จแล้ว

ตัวอย่าง:

# สำหรับ jar ใน $(find / -name '*.jar'); ทำ
> เปิดเครื่องรูด -l "$jar" | grep 'JndiLookup.class' &>/dev/null && echo "พบช่องโหว่ใน $jar"
> เสร็จแล้ว
พบช่องโหว่ใน /usr/lib/unifi/lib/log4j-core-2.13.3.jar
พบช่องโหว่ใน /home/minecraft/.m2/repository/org/spigotmc/minecraft-server/1.15.2-SNAPSHOT/minecraft-server-1.15.2-SNAPSHOT.jar
พบช่องโหว่ใน /home/minecraft/.m2/repository/org/spigotmc/minecraft-server/1.15.1-SNAPSHOT/minecraft-server-1.15.1-SNAPSHOT.jar
...

ระวังเมื่อเรียกใช้สิ่งนี้บนระบบที่มีระบบไฟล์เครือข่ายที่เมาท์เนื่องจากประสิทธิภาพอาจได้รับผลกระทบ ในกรณีเหล่านั้น คุณต้องรันคำสั่งบนไฟล์เซิร์ฟเวอร์เอง

Score:0
ธง cn

ลซ ตรวจสอบไฟล์ที่เปิดอยู่ โพสต์โดย ฟลอเรียน รอธ บนทวิตเตอร์:

ps aux | egrep '[l]og4j'
lsof | grep log4j

อีกสองคำสั่งด้วย แต่คำสั่งเหล่านี้เป็นคำสั่งค้นหาในหน่วยความจำ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา