방금 교체한 라이브러리의 이전 버전을 사용하고 있는 실행 중인 프로그램을 식별합니다.

방금 교체한 라이브러리의 이전 버전을 사용하고 있는 실행 중인 프로그램을 식별합니다.

업데이트 설치 후 해결됨CVE-2014-0160(오픈SSL힘든 노력버그), libssl을 사용할 수 있는 모든 것을 다시 시작할 때 주의해야 했습니다. Apache 및 VPN 소프트웨어와 같은 많은 서비스에는 여전히 오래된 취약한 libssl이 로드되어 있었고 패키지 관리자는 문제를 해결하려고 시도하지 않았습니다.

이로 인해 생각이 들었습니다. 공유 라이브러리를 업데이트한 후 현재 실행 중인 프로그램이 이전 버전의 라이브러리에 연결되어 있는지 어떻게 안정적으로 확인할 수 있습니까? 로드 중인 특정 공유 라이브러리의 인스턴스가 현재 디스크에 있는 동일한 인스턴스인지 확인하기 위해 링커 수준이나 파일 설명자 수준에서 실행 중인 프로세스를 조사하는 방법이 있어야 한다고 확신합니다.

답변1

이 작업을 수행하는 두 가지 방법을 찾았습니다.

  1. Debian 전용, 프로세스에서 가장 많이 삭제/교체된 파일을 나열합니다.(에 있는 것과 같이 일시적인 것으로 알려진 일부 파일 제외 /tmp): 이 debian-goodies패키지에는 디스크에서 사라지거나 교체된 열린 파일을 찾기 checkrestart위해 출력을 가져와 옵션은 관련 파일을 식별합니다.lsof-v
  2. 일반, 수동을 사용하면 걱정되는 파일을 지정할 수 있습니다.출력을 보고 lsof삭제되거나 대체된 파일에 대한 열린 파일 핸들을 식별할 수 있습니다. 출력에서 이러한 파일은 lsof -nnP네 번째 열에서 로 식별되는 것으로 나타납니다. 특정 라이브러리(이 경우 OpenSSL)에 대한 오래된 핸들을 찾는 등의 작업을 DEL수행할 수 있습니다 . lsof -nnP | grep DEL.*libssl.so이는 사용 중인 특정 버전의 lsof와 패키지 관리자의 동작에 따라 크게 달라질 수 있으므로 주의해서 진행하세요.

    pluto      3592       root  DEL       REG      202,0               98831 /lib/i386-linux-gnu/libssl.so.1.0.0
    pluto      3604       root  DEL       REG      202,0               98831 /lib/i386-linux-gnu/libssl.so.1.0.0
    

답변2

Linux에서의 빠르고 더러운 방법(감사해요 라켄슈타인):

grep '/usr/lib/libssl1.*(deleted)' /proc/*/maps

정확한 구문 분석을 위해 옵션을 호출 lsof하여 -F구문 분석 가능한 출력을 얻을 수 있습니다. f삭제된 파일을 필터링하기 위한 필드( fDEL) 및 n파일 경로를 가져오기 위한 필드를 포함합니다 . 아래 코드 조각은 개행 문자가 포함된 파일 이름을 차단합니다.

lsof -F pfn | awk '
    /^p/ {pid=substr($0,2)}
    /^fDEL$/ {getline; if (/n\/usr\/lib\/libssl1\.0\.1.*(deleted)$/) print pid}
'

관련 정보