바이너리를 실행하지 않고도 인터넷에 액세스할 수 있는지 확인하는 방법은 무엇입니까?

바이너리를 실행하지 않고도 인터넷에 액세스할 수 있는지 확인하는 방법은 무엇입니까?

바이너리 실행 파일을 실행하기 전에 인터넷 액세스(예: 집에 전화)를 시도하는지 확인할 수 있는 신뢰할 수 있는 방법이 있습니까?

많은 바이너리가 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

관련 정보