바이너리 실행 파일을 실행하기 전에 인터넷 액세스(예: 집에 전화)를 시도하는지 확인할 수 있는 신뢰할 수 있는 방법이 있습니까?
많은 바이너리가 glibc의 ioctl/socket/connect를 사용하여 인터넷에 액세스하는 것 같습니다. 이는 objdump
이러한 기능을 검사하면 이와 관련된 일부 정보가 드러날 수 있음을 의미합니다. 하지만 충분합니까? 이러한 glibc 기능을 사용하지 않고 인터넷에 액세스할 수 있는 방법이 있습니까? 이를 어떻게 감지할 수 있나요?
답변1
프로그램은 다양한 방법으로 인터넷에 액세스할 수 있습니다.예를 들어다음과 같은 것을 사용하십시오라이브러리 컬. 이러한 사용을 감지 ldd
하고 바이너리에서 어떤 기호가 사용되는지 다시 확인 objdump
하고 설명서를 읽어 다양한 기능의 기능을 알아낼 수 있습니다.
그러나 악성 바이너리를 검사하려는 경우에는 이것만으로는 충분하지 않습니다. 바이너리는 소켓 열기 등의 시스템 호출을 사용하여 커널을 직접 호출할 수도 있고 라이브러리를 로드하여 dlopen(3)
사용을 감지하기 더 어렵게 만들 수도 있습니다.
네트워크 액세스 없이 바이너리를 실행하려면 unshare
네트워크 네임스페이스에서 실행할 수 있습니다.
unshare -n binary
하지만 이 작업은 루트로 수행해야 하므로 다른 사용자에게 돌아가고 싶을 수도 있습니다 su
(악성 바이너리의 경우 자신의 사용자가 아닐 수도 있음).
unshare -n su sacrificialuser -c binary
지적한대로자일스, 이것은 어떤 목적으로든 실행 파일을 대신하여 네트워크에 액세스하는 cronjob 설정을 포함하여 바이너리 실행의 다른 가능한 부작용으로부터 사용자를 보호하지 않습니다.
또는 바이너리에서 모든 네트워크 트래픽을 삭제(및 기록)하는 iptables
규칙을 설정하거나 더 나은 방법으로 가상 머신을 설정하고 그 안에서 바이너리를 실행한 다음 가상 머신을 중지할 수 있습니다.nftables