가상 시스템에서 격리 된 환경에서 실행 파일을 실행하는 도구 나 기술이 있는지 궁금합니다. 프로그램이 실행되는 동안 응용 프로그램을 감사 할 수 있기를 원합니다. 즉 실행 파일이 수행하는 모든 작업 (파일 및 네트워크 액세스)을 확인하십시오.
그렇게함으로써 실행 파일이 악성인지 확인할 수 있기를 원합니다 (즉, 파일 읽기 / 쓰기, 네트워크 포트 청취 / 연결 등).
그래픽 인터페이스에는 신경 쓰지 않을 것입니다.
가상 시스템에서 격리 된 환경에서 실행 파일을 실행하는 도구 나 기술이 있는지 궁금합니다. 프로그램이 실행되는 동안 응용 프로그램을 감사 할 수 있기를 원합니다. 즉 실행 파일이 수행하는 모든 작업 (파일 및 네트워크 액세스)을 확인하십시오.
그렇게함으로써 실행 파일이 악성인지 확인할 수 있기를 원합니다 (즉, 파일 읽기 / 쓰기, 네트워크 포트 청취 / 연결 등).
그래픽 인터페이스에는 신경 쓰지 않을 것입니다.
답변:
내부에서 실행 파일을 실행하는 도구 또는 가상 머신
예,이를 애플리케이션 가상화 라고 합니다.
LXC (Linux Containers)는이 설정을 위해 일반적으로 사용되는 도구입니다. 이 응용 프로그램에 대해 완전히 분리 된 네트워크를 설정할 수 있으며 chroot와 매우 유사한 일종의 가상 머신으로 "샌드 박스 화"합니다. 이것은 주로 감사 목적이 아닌 보안 목적 ( "감옥")을위한 것입니다.
전체 LXC 컨테이너를 설명하고 정확하게 감사하는 방법을 설명하는 것은 질문의 범위를 벗어난 것이라고 생각합니다. 아래는 시작하는 방법에 대한 약간의 설명입니다.
프로그램이 실행되는 동안 실행 파일이 수행하는 모든 작업 (파일 및 네트워크 액세스)을 볼 수 있기를 원합니다.
이것은 사용하여 수행 할 수 있으며 strace
Unix & Linux에서 동일한 질문을했습니다.
거기에 대답 했듯이 기본적으로
strace -t -e trace=open,close,read,getdents,write,connect,accept command-here
에서 이 문서 . 그것은 다음과 같습니다.
lxc-macvlan.conf
구성 파일 :
# example as found on /usr/share/doc/lxc/examples/lxc-macvlan.conf
# Container with network virtualized using the macvlan device driver
lxc.utsname = alpha
lxc.network.type = macvlan
lxc.network.flags = up
lxc.network.link = eth0 # or eth2 or any of your NICs
lxc.network.hwaddr = 4a:49:43:49:79:bd
lxc.network.ipv4 = 0.0.0.0/24
다음을 사용하여 시작하십시오 lxc-execute
.
sudo lxc-execute -n bash-test2 -f lxc-macvlan.conf /bin/bash
LXC는 시스템 및 애플리케이션 유형의 컨테이너를 모두 제공합니다. 여기서 애플리케이션 컨테이너를 찾고 있습니다.
/sys
가상화되지 않고 /sys
컨테이너에서 변경 한 내용 /sys
이 호스트에서 변경됩니다. 웹에서 빠른 검색을 수행하면서 컨테이너에서 "탈출"하는 방법을 설명하는 기사가 있습니다. LXC는이 문제에 대한 좋은 해결책이 될 수 있지만 현재는 그렇지 않으며 보안 도구로 사용되어서는 안됩니다.
lxc.mount
옵션 을 사용하지 않습니다 . 이것은 실행 가능한 실행으로 전체 사용자의 파일 시스템에 액세스 할 수 있음을 의미합니다.
당신이 찾고있는 것은 프로그램이 시스템 (특히 커널)과 상호 작용하는 방법을 보여주는 도구입니다. 프로그램은 syscall을 사용하여 시스템과 상호 작용합니다. 시스템 콜의 예는 다음과 같습니다.
open
-파일을 여는 데 사용됩니다.read
그리고 write
-파일 디스크립터를 읽고 / 쓰는 데 사용된다;connect
-소켓을 피어에 연결하는 데 사용됩니다.man syscalls
).요점은 : syscalls를 사용하여 추적 할 수 있습니다 ptrace(2)
. 기본적으로, 당신은 주위에 구축 된 도구를 찾고 있습니다 ptrace
. 이러한 도구 중 하나는 strace(1)
을 (를) 인수로 사용하여 출력하는 터미널 응용 프로그램입니다.
출력은 C 방식입니다. 예를 들면 다음과 같습니다.
$ strace cat test
execve("/bin/cat", ["cat", "test"], [/* 55 vars */]) = 0
/* ... */
open("test", O_RDONLY) = 3
/* ... */
read(3, "hello\n", 32768) = 6
write(1, "hello\n", 6) = 6
read(3, "", 32768) = 0
/* ... */
거기에서 cat test
이라는 파일을 열고 test
내용 ( hello
)을 읽고 표준 출력에 배치하는 것을 볼 수 있습니다.
strace
많은 출력을 생성 할 수 있으므로 맨 페이지 ( man strace
), 특히 -e
관심있는 syscall 만 볼 수 있는 출력 문서 를 읽으십시오 .
불행히도, 나는 그래픽 또는 사용하기 쉬운 대안을 알지 못합니다. 당신이 그들을 찾고 싶을 경우, ptrace
검색 키워드 중 하나이어야한다.
격리에 대해서는 많은 기술이 있습니다. Chroot, Linux 컨테이너 (현재 개발 및 불완전한 상태), 소프트웨어 가상화 및 반가상 화가 가장 많이 사용됩니다. 그러나 이것은 논의하기에는 너무 큰 주제입니다. 더 자세한 내용을 원하면 새로운 질문을여십시오.
AppArmor를 살펴보십시오 . 실행 파일에 대해 제한된 프로필을 추가하고 "불만"모드로 전환 할 수 있습니다. 여기서 작업은 허용되지만 기록되며 요구 사항을 충족한다고 생각합니다.
그러나 이것으로는 충분하지 않습니다. 영리한 악성 바이너리는 관찰 중임을 감지하고 관찰되지 않는 경우를 제외하고 악의적 인 작업을 수행하지 않을 수 있습니다.
AppArmor는 이보다 더 나아가 응용 프로그램을 승인 된 작업으로 만 제한 할 수 있습니다. Ubuntu Software Center 에있는 앱은 AppArmor 프로파일과 함께 제공됩니다.
알다시피, 특히 실행 파일이 악의적이라고 생각할만한 이유가있는 경우 가상 시스템이 격리를 제공하는 것이 좋습니다. 그러나 가상화 플랫폼 (하드웨어 및 소프트웨어 모두)의 취약점을 악의적 인 코드로 악용 할 수 있으므로 완벽하지는 않습니다. 실제 가상화 취약점의 예는 다음과 같습니다. http://www.kb.cert.org/vuls/id/649219
당신은 스냅을 만들 수 있습니다 .
스냅은 "보안 메커니즘을 통해 OS 및 기타 앱과 연결되어 있지만 사용자 및 OS 기본값으로 제어되는 세분화 된 정책에 따라 다른 스냅과 컨텐츠 및 기능을 교환 할 수 있습니다." ( http://snapcraft.io/docs/snaps/intro에서 )
이들은 예를 들어 seccomp 를 사용하는 것과 같이 AppArmor 외에 추가 격리를 제공 합니다.
또한 시스템에 쉽게 배포하고 원자 업데이트를 수행하기 위해 스냅을 자체 포함 할 수 있습니다.
감사합니다. 답변이 매우 도움이되었습니다 ...
나는 또한 이것을 발견했다 : https://downloads.cuckoosandbox.org/docs/
VM에있는 동안 맬웨어를 분석하는 매우 흥미로운 도구입니다.
sandbox somebinary
있고 가상sandbox
프로그램이somebinary
읽거나 쓴 모든 파일을 모두 기록 할 수 있는지 상상해보십시오. IP / 포트가 연결되어 있고, 데이터가 전송되는 등 유용한 정보가 될 것입니다. 또한 이와 같은 것이 존재하는지 알고 싶습니다 (실제로 이러한 도구없이 VM에서 실행중인 프로그램을 관찰하는 것은 무의미합니다). 어쨌든 그것이 무엇인지 말할 수 없습니다). 좋은 질문.