라이브러리 패키지를 사용하여 실행 중인 프로세스를 감지하는 방법은 무엇입니까?

라이브러리 패키지를 사용하여 실행 중인 프로세스를 감지하는 방법은 무엇입니까?

이 명령은 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 glibcRed 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

원천

관련 정보