Рейтинг:69

Как проверить, установлен ли Log4j на моем сервере?

флаг gq
Uri

Я читал об уязвимостях безопасности, связанных с Log4j.

Как проверить, установлен ли Log4j на моем сервере? Мои конкретные серверы используют Убунту 18.04.6 ЛТС.

Я установил много сторонних пакетов и, возможно, некоторые из них содержат его.

Есть ли команда для запуска на моем сервере, чтобы проверить, установлен ли Log4j?

флаг ch
Обратите внимание, что это библиотека Java, поэтому, если вы не используете какое-либо приложение Java (и, соответственно, если у вас не установлена ​​Java), вы в безопасности.
mfinni avatar
флаг cn
Неправда — приложения могут поставляться со своей собственной JRE, вам не нужно устанавливать Java в вашей системе, чтобы запускать приложения Java.
Рейтинг:48
флаг ua

Попробуйте этот скрипт, чтобы получить подсказку:

echo "проверка уязвимости log4j..."
OUTPUT="$(найти log4j|grep -v log4js)"
если [ "$ ВЫВОД" ]; тогда
  echo "[ПРЕДУПРЕЖДЕНИЕ] может быть уязвимым, эти файлы содержат имя:"
  эхо "$ ВЫВОД"
фи
OUTPUT="$(dpkg -l|grep log4j|grep -v log4js)"
если [ "$ ВЫВОД" ]; тогда
  echo "[ПРЕДУПРЕЖДЕНИЕ] возможно уязвимые пакеты, установленные dpkg:"
  эхо "$ ВЫВОД"
фи
если [ "$(команда -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-программы без установки Java?

Или даже скомпилированные версии, в которых исходные файлы уже не находятся внутри упакованных архивов?


Также есть много разработок по Гитхаб, где вы найдете атаки и контрмеры.


Это отнимает у меня много времени. Я ищу человека, которому могу передать право собственности на репозиторий на GitHub.

флаг in
Это имеет те же оговорки, что и ответ Теро Килканена. И только потому, что Java не находится на пути, который не гарантирует, что он не установлен.
Uri avatar
флаг gq
Uri
Это работает для меня. log4j не установлен на моих серверах. Хотя возможно, что я установил приложение, которое его использует, шансы невелики.
флаг ch
О скомпилированных Java-программах: да, могут быть с GraalVM/Quarkus/Micronaut/Spring Native и тому подобное. Однако я не уверен, что Log4J совместим с нативными сборками.
user3067860 avatar
флаг ng
@Uri Вероятность того, что вы установили приложение, использующее log4j, _очень, очень высока_. Log4j очень, очень распространен в мире Java, а Java — очень, очень распространенный язык.
флаг in
Меня забавляет поиск экземпляров уязвимости, которая позволяет выполнять случайные удаленные сценарии с помощью строки bash, которая запускает случайный удаленный сценарий.
флаг ua
Конечно, никогда не направляйте непроверенный код в оболочку — прочитайте сценарий заранее без `| Баш!!!
флаг id
> Я не уверен, могут ли быть скомпилированные Java-программы, работающие на сервере без установленной Java. Конечно может. Вы когда-нибудь слышали о JRE в комплекте?
Gerrit avatar
флаг cn
У Lunasec отличная информация. Они также опубликовали хэши уязвимых двоичных классов log4j, чтобы вы могли сканировать файлы .jar и .war на предмет их наличия. https://www.lunasec.io/docs/blog/log4j-zero-day-mitigation-guide/
флаг tr
locate может использовать устаревшие данные, вы должны сначала выполнить updateb
Gerrit avatar
флаг cn
Если приложение компилирует классы во время выполнения из немаркированного источника, или оно коммерчески обфусцировано, или загружает классы с помощью удаленного загрузчика классов, вам придется использовать canarytoken или что-то подобное и надеяться, что путем фаззинга ввода вы найдете любой экземпляр log4j.
флаг ua
** Это занимает слишком много времени для меня. Я ищу человека, которому могу передать право собственности на репозиторий на GitHub**
флаг es
Обратите внимание, что простой поиск имен файлов, содержащих `log4j`, даст ряд ложных срабатываний, в частности, log4j 1.x или `log4j-over-slf4j`, которые не имеют ничего общего с этой уязвимостью в Log4j 2.x (точнее, `log4j-core` между версиями 2.0 и 2.15).
Рейтинг:26
флаг in

Нет такой команды, которая наверняка вам это скажет. Некоторые приложения поставляют библиотеки, которые они используют, непосредственно в виде jar-файла, некоторые содержат их в архиве.

И даже тогда вы не знаете, какая версия поставляется и как она используется. Единственный способ защититься от CVE — прочитать объявления о безопасности и примечания к выпуску ваших приложений и следовать их рекомендациям.

Рейтинг:10
флаг jp

Попробуйте эти команды:

  • дпкг -л | grep liblog4j

  • дпкг -л | grep log4

  • найти / -имя log4j-core-*.jar

  • найти log4j | grep -v log4js

флаг cn
это `log4js` в последней строке опечатка?
grofte avatar
флаг us
Должен ли я выполнить `find / -name log4j-core-*.jar 2>/dev/null` или использовать sudo/root?
флаг cn
@JanDorniak Я так не думаю. Их идея состоит в том, чтобы найти все упоминания `log4j`, но исключить `log4js`.
флаг cn
@GrzegorzOledzki недостаток сна.... Я пропустил `-v`
dustbuster avatar
флаг nf
Я сделал это `find / -name *log4j*` и использовал композитор в качестве элемента управления: `find / -name *composer*`, и он нашел в нем каждый файл с таким именем.
Рейтинг:5
флаг in
yun

Я написал этот скрипт Python, чтобы найти уязвимые версии Log4j2 в вашей системе: https://github.com/fox-it/log4j-finder

Он работает путем рекурсивного сканирования диска и внутри файлов Java Archive и поиска известных плохих файлов.

Gerrit avatar
флаг cn
Лично рекомендую это. Легко проверяемый код и рекурсивная работа с архивами.
флаг bm
Хотя это приятно, он работает вечно на моей машине. Не знаю, нормально ли это
Gerrit avatar
флаг cn
Вы пытались запустить if с -v и/или ограниченным деревом каталогов? Если у вас подключен сетевой диск, это может вызвать проблемы.
Рейтинг:4
флаг cn

log4jscanner

Log4jscanner, опубликованный Google под лицензией Apache-2.0, представляет собой сканер уязвимостей файловой системы log4j и пакет Go для анализа файлов JAR.

Рейтинг: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 тема.jar и иметь распаковать, найти и ша256сум команды, то вы можете выполнить сравнение с известными хэшами с помощью:

JARFILE=subject.jar; DIROUT=$(mktemp -d); unzip -qq -DD "$JARFILE" '*.class' -d "$DIROUT" && find "$DIROUT" -type f -not -name "*"$'\n'"*" -name '*.class ' -exec sha256sum "{}" \; | вырезать -d" " -f1 | сортировать | uniq > "$JARFILE"-хэши; rm -rf -- "$DIROUT"

comm -12 хэшей subject.jar-хэши

Если связь имеет выход, то есть соответствующий хэш.

Gerrit avatar
флаг cn
@ rubo77, я только что сделал это.
флаг ua
спасибо за пиар на https://github.com/rubo77/log4j_checker_beta/pull/6
флаг bm
можем ли мы использовать этот https://github.com/mubix/CVE-2021-44228-Log4Shell-Hashes/blob/main/sha256sums.txt напрямую? Спасибо за пиар
Gerrit avatar
флаг cn
Нет, это хэши jar-файлов, для проверки класса нужны хэши .class-файлов. Я могу предложить это: https://github.com/nccgroup/Cyber-Defence/blob/master/Intelligence/CVE-2021-44228/modified-classes/sha256sum.txt
Gerrit avatar
флаг cn
Я должен отметить, что проверка отпечатков пальцев на первом уровне довольно бесполезна для проверки файлов WAR. Вы должны распаковать их заранее. EAR наверное тоже, но вдвойне. Некоторые jar-файлы также могут содержать другие jar-файлы в качестве ресурсов. Конечно, WAR и EAR, вероятно, также живут в одной и той же файловой системе в распакованном виде.
Рейтинг:3
флаг br

Пытаться Сифт. Он создает спецификацию программного обеспечения (SBOM), в которой вы затем можете искать старые версии log4j (даже работает с образами докеров).

Что-то вроде syft dir:/opt/foo-application | grep log4j поиск в обычных развертываниях. syft каталог:/ | 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-архив

Создание скрипта для передачи всех ваших образов docker в syft не должно быть слишком сложным, но вы можете найти вдохновение в этих моих скриптах: https://github.com/debuglevel/syft-grype-utils

флаг cn
Взгляните также на Grype — https://github.com/anchore/grype — от тех же людей. Он включает Syft и перечисляет известные уязвимости по CVE, поэтому прямо сообщит вам, уязвима ли ваша система.
Рейтинг:2
флаг gb

Джон Хаммонд опубликовал вместе с некоторыми другими размещенную службу перенаправления LDAP, так что вы можете пропустить все махинации. https://log4shell.huntress.com/

Направления просты - он генерирует для вас идентификатор клиента (он находится в URL-адресе, а также является частью строки инъекции), который вы можете опубликовать в любой форме/запросе/или производной от веб-запроса.

Как правило, если вы используете что-то, что «не работает с этим, потому что это локальный доступ», тогда все в порядке, поскольку нет средств для пересылки через ваше приложение на основе Java.

Примечательно: я считаю, что основное внимание следует уделить аппаратному обеспечению управления сетью L2/L3; Особенно, если вы имеете дело с интернет-провайдером или ваш контент обслуживается через службу хостинга.

Elysiumplain avatar
флаг gb
Даже не заставляйте меня начинать отложенную инъекцию программы-вымогателя из службы хостинга pwnd, которая просто обслуживает встроенное вредоносное ПО в запрошенном контенте.
флаг cu
Источник доступен здесь. Запустите весь сервис на своей машине: https://github.com/huntresslabs/log4shell-tester.
Рейтинг:1
флаг br

Все попытки здесь устранить уязвимости в log4j терпят неудачу. Вы не можете полагаться на найти команда, так как она просматривает только набор настроенных путей (/etc/updatedb.conf на Дебиан).

Программное обеспечение может устанавливаться в местах, не настроенных в обновленный b.conf и быть полностью пропущенным заданием cron, которое обновляет базу данных locate.

Кроме того, выясняется, что поставщики программного обеспечения (например, Эластичный) переупаковали уязвимый JndiLookup.class (например: elasticsearch-sql-cli-7.16.1.jar) в местах, которые ранее не были известны, что оставляет незавершенными решения, основанные на известных хэшах файлов, именах или путях.

@shodanshok здесь на правильном пути, но вместо того, чтобы явно искать log4j, необходимо просмотреть каждый «.jar» в системе.

Это более полное, требуется zip-пакет. и расширение ответа 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.
...

Будьте осторожны при запуске этого в системе с смонтированными сетевыми файловыми системами, так как это может повлиять на производительность. В таких случаях вам нужно запускать команды на самом файловом сервере.

Рейтинг:1
флаг ca

Проверка установленных пакетов недостаточна, т.к. log4j могут быть вручную установлены некоторыми другими приложениями.

Для серверов Linux я использую следующее: найти / -iname "*log4j*.jar"

Для серверов Windows можно использовать что-то подобное: каталог C:\*log4j*.jar /s (изменение С: к Д: и так далее для других дисков).

Имена файлов обычно показывают версию библиотеки, но для перепроверки вы можете открыть файл манифеста и прочитать поля версии/реализации.

Обратите внимание, что приведенное выше не достаточно поймать встроенный log4j (например: в других файлах jar). Для этого нужно найти соответствующую строку, но это довольно много времени и ресурсов, поэтому я предлагаю начать с поиска файлов в качестве первого (но неполного) шага.

флаг ua
Чего-то не хватает в сценарии с https://github.com/rubo77/log4j_checker_beta в принятом ответе?
shodanshok avatar
флаг ca
@ rubo77 нет, но не всем, что запускать случайный скрипт github на критически важном сервере.
флаг ua
это не случайно, посмотрите на это, в сценарии мало что происходит, и это легко понять
Рейтинг:0
флаг cn

lsof проверяет открытые файлы, размещенные пользователем Флориан Рот в Твиттере:

PS вспомогательный | egrep '[l]og4j'
lsof | grep log4j

также две другие команды, но это резидентные команды поиска в памяти.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.