이 명령은 glibc를 사용하여 현재 실행 중인 프로세스를 반복합니다.
lsof | grep libc | awk '{print $2}' | sort | uniq
/libc/
일치할 뿐만 아니라 libc
내 시스템에서도 다음 과 같은 문제가 발생하기 때문에 매우 짜증스럽습니다 .
/lib/x86_64-linux-gnu/libcap.so.2.24
/lib/x86_64-linux-gnu/libcgmanager.so.0.0.0
/lib/x86_64-linux-gnu/libcom_err.so.2.1
/lib/x86_64-linux-gnu/libcrypt-2.19.so
/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
/usr/lib/libcamel-1.2.so.45.0.0
/usr/lib/unity-settings-daemon-1.0/libcolor.so
/usr/lib/unity-settings-daemon-1.0/libcursor.so
/usr/lib/x86_64-linux-gnu/colord-plugins/libcd_plugin_camera.so
/usr/lib/x86_64-linux-gnu/colord-plugins/libcd_plugin_scanner.so
/usr/lib/x86_64-linux-gnu/gtk-3.0/modules/libcanberra-gtk3-module.so
/usr/lib/x86_64-linux-gnu/libcairo-gobject.so.2.11301.0
/usr/lib/x86_64-linux-gnu/libcairo.so.2.11301.0
/usr/lib/x86_64-linux-gnu/libcanberra-0.30/libcanberra-pulse.so
/usr/lib/x86_64-linux-gnu/libcanberra-gtk3.so.0.1.9
/usr/lib/x86_64-linux-gnu/libcanberra.so.0.2.5
/usr/lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
/usr/lib/x86_64-linux-gnu/libck-connector.so.0.0.0
/usr/lib/x86_64-linux-gnu/libcolordprivate.so.1.0.23
/usr/lib/x86_64-linux-gnu/libcolord.so.1.0.23
/usr/lib/x86_64-linux-gnu/libcroco-0.6.so.3.0.1
/usr/lib/x86_64-linux-gnu/libcupsmime.so.1
/usr/lib/x86_64-linux-gnu/libcups.so.2
/usr/lib/x86_64-linux-gnu/samba/libcliauth.so.0
/usr/lib/x86_64-linux-gnu/samba/libcli_cldap.so.0
/usr/lib/x86_64-linux-gnu/samba/libcli-ldap-common.so.0
/usr/lib/x86_64-linux-gnu/samba/libcli-nbt.so.0
/usr/lib/x86_64-linux-gnu/samba/libcli_smb_common.so.0
/usr/lib/x86_64-linux-gnu/samba/libcli_spoolss.so.0
/usr/lib/x86_64-linux-gnu/samba/liblibcli_lsa3.so.0
/usr/lib/x86_64-linux-gnu/samba/liblibcli_netlogon3.so.0
거의 모든 것이 이 명령을 사용한다는 것을 알고 있지만 libc
이 명령을 개선하고 싶습니다. 다른 라이브러리에서의 사용을 고려하십시오. 어떻게 해야 하나요?
제 생각에는 이 접근 방식의 단점은 제공된 패키지에 libc
다른 공유 라이브러리 파일이 많이 포함될 수 있다는 것입니다(모두 , glibc
또는 등 라이브러리 이름의 상위 용어에 포함될 수 있음 libboost-python
). 단어 경계를 사용하거나 -
끝을 표시하는 것은 libc
실제로 이 문제를 해결하지 못합니다. Braiam이 지적했듯이, 데비안의 경우 .so
처럼 이러한 파일의 대부분 또는 전부가 결함이 있는 핵심 파일에 연결될 수 있으므로 이는 결함이 아닐 수도 있습니다 .libc6
특정 OS/배포판이 필요한 경우 Debian Linux를 가정하세요.
또한 짜증나는 것은 명령이 lsof | awk '/libc/{print $2}' | sort -u
.
답변1
이는 우회적이고 매우 부정확한 접근 방식입니다. 라이브러리 파일이 어디에 있는지 알고 있으므로 이를 일치시키기 위해 휴리스틱을 사용할 필요가 없으며 정확한 경로를 검색할 수 있습니다.
파일이 열려 있는 프로세스를 나열하는 매우 간단한 방법이 있습니다.
fuser /lib/x86_64-linux-gnu/libc.so.6
그러나 여기에는현재의파일 버전, 즉 라이브러리의 새 복사본을 사용하는 프로세스를 엽니다. 삭제된 복제본이 있는 프로세스를 나열하려면 이것을 사용할 수 있지만 lsof
정확한 경로를 검색하게 됩니다. 삭제된 파일이 포함된 파일 시스템을 제한 lsof
하여 성능을 향상하고 일시적으로 액세스할 수 없는 네트워크 파일 시스템과 같은 차단을 방지할 수 있습니다.
lsof -o / | awk '$4 == "DEL" && $8 == "/lib/x86_64-linux-gnu/libc-2.13.so" {print $2}'
업그레이드된 패키지에 여러 라이브러리가 포함되어 있고 라이브러리를 검색하려는 경우 패키지의 모든 라이브러리 파일을 나열하십시오. 프로그래밍 방식으로 이를 수행하는 방법은 다음과 같습니다(Debian 패키지의 경우 rpm -ql glibc
Red Hat 과 같은 배포판에 맞게 조정 ).
lsof -o / | awk '
BEGIN {
while (("dpkg -L libc6:amd64 | grep \\\\.so\\$" | getline) > 0)
libs[$0] = 1
}
$4 == "DEL" && $8 in libs {print $2}'
답변2
grep -w libc
이 예에서는 사용되었습니다. 정적 분석 에도 사용할 수 있습니다 ldd
.
일치시키려면 정규식을 사용해야 합니다. grep '/libc-'
여기에서는 작동하지만 libcan과 같은 것을 찾으려면 단어 끝에서 일치가 강제되는 '/libcan\>'
비슷한 것을 사용할 수 있습니다.\>
답변3
GHOST 취약점 테스트(이전에 발견한 모든 것):
wget https://gist.githubusercontent.com/koelling/ef9b2b9d0be6d6dbab63/raw/de1730049198c64eaf8f8ab015a3c8b23b63fd34/gistfile1.c
gcc gistfile1.c -o CVE-2015-0235
./CVE-2015-0235