
멀티플랫폼 리눅스 샌드박스
Detux는 Linux 악성코드의 트래픽 분석을 수행하고 이를 통해 IOCs를 캡처하기 위해 개발된 샌드박스입니다. QEMU 하이퍼바이저를 사용하여 다양한 CPU 아키텍처용 Linux(Debian)를 에뮬레이션합니다.
현재 지원되는 CPU:
지금 Live 버전 사용: http://detux.org
이 Detux 릴리스는 지정된 CPU 아키텍처에서 Linux 바이너리/스크립트를 실행하기 위한 스크립트를 포함합니다. 플랫폼을 모르더라도 걱정하지 마세요. 스크립트에 포함되어 있으며 Magic 패키지가 CPU 아키텍처를 자동으로 선택하는 데 도움을 줍니다. x86이 기본 CPU 버전이며, 설정 파일에서 다른 버전으로 조정할 수 있습니다.
이 릴리스는 DICT 형식의 분석 보고서를 제공하며, NOSQL 데이터베이스에 쉽게 삽입되도록 사용자 지정할 수 있습니다.
샌드박스 라이브러리의 사용법을 보여주는 예제 스크립트가 제공됩니다.
- 정적 분석
-- 바이너리에서 추출된 기본 문자열
-- readelf 명령으로 생성된 ELF 정보
-- report.py를 수정하여 더 많은 타사 명령을 추가하여 바이너리를 분석하고 결과를 DICT에 추가할 수 있습니다.
- 동적 분석
-- 캡처된 pcap을 DPKT로 파싱하여 패킷에서 IOC 및 읽을 수 있는 정보를 추출합니다.
시스템 패키지
Python 라이브러리 (가상 환경 사용 권장)
Detux를 사용하기 전에 위의 요구 사항이 충족되는지 확인하십시오. 일부 종속성은 OS에 따라 다를 수 있습니다.
- NIC1: 이 인터페이스는 호스트에 접근하기 위한 것입니다.
- NIC2: QEMU 샌드박스 VM과 브리지된 인터페이스입니다. 이 인터페이스의 트래픽을 WHONIX, REMNUX 또는 사용자 정의 게이트웨이로 리디렉션하여 샌드박스 VM의 인터넷 액세스를 필터링/허용할 수 있습니다.
가능한 모든 CPU 아키텍처에 대해 미리 빌드된 QEMU Debian VM 이미지를 업로드한 aurel에게 특별히 감사드립니다.
VM 이미지는 https://people.debian.org/~aurel32/qemu/에 있습니다. 같은 링크에는 VM 이미지를 호출하기 위한 명령 예제가 포함되어 있습니다.
다음 스크립트를 사용하여 VM 이미지를 Detux의 "qemu" 폴더에 자동으로 다운로드할 수 있습니다.
#x86
wget https://people.debian.org/~aurel32/qemu/i386/debian_wheezy_i386_standard.qcow2 -P qemu/x86/1/
#x86-64
wget https://people.debian.org/~aurel32/qemu/amd64/debian_wheezy_amd64_standard.qcow2 -P qemu/x86-64/1/
#arm
wget https://people.debian.org/~aurel32/qemu/armel/debian_wheezy_armel_standard.qcow2 -P qemu/arm/1/
wget https://people.debian.org/~aurel32/qemu/armel/initrd.img-3.2.0-4-versatile -P qemu/arm/1/
wget https://people.debian.org/~aurel32/qemu/armel/vmlinuz-3.2.0-4-versatile -P qemu/arm/1/
#mips
wget https://people.debian.org/~aurel32/qemu/mips/vmlinux-3.2.0-4-4kc-malta -P qemu/mips/1/
wget https://people.debian.org/~aurel32/qemu/mips/debian_wheezy_mips_standard.qcow2 -P qemu/mips/1/
#mipsel
wget https://people.debian.org/~aurel32/qemu/mipsel/vmlinux-3.2.0-4-4kc-malta -P qemu/mipsel/1/
wget https://people.debian.org/~aurel32/qemu/mipsel/debian_wheezy_mipsel_standard.qcow2 -P qemu/mipsel/1/
Detux는 SSH를 사용하여 VM과 통신하므로 VM이 네트워킹 기능을 가지기 위해 현재 필요합니다. 나열된 바이너리가 동일한 경로에 있다고 가정하면 /etc/sudoers에 다음 줄을 추가할 수 있습니다(루트가 아닌 사용자인 경우에만):
Cmnd_Alias QEMU_CMD = /usr/bin/qemu-*, /sbin/ip, /sbin/ifconfig, /sbin/brctl
<your detux username here> ALL = (ALL) NOPASSWD: QEMU_CMD
바이너리 경로가 다른 경우 경로를 변경하십시오.
/etc/qemu-ifup에 다음 구성을 추가합니다. 이미 있는 경우 원본을 백업하십시오.
#! /bin/sh
# Script to bring a network (tap) device for qemu up.
# The idea is to add the tap device to the same bridge
# as we have default routing to.
# in order to be able to find brctl
PATH=$PATH:/sbin:/usr/sbin
ip=$(which ip)
ifconfig=$(which ifconfig)
echo "Starting" $1
if [ -n "$ip" ]; then
ip link set "$1" up
else
brctl=$(which brctl)
if [ ! "$ip" -o ! "$brctl" ]; then
echo "W: $0: not doing any bridge processing: neither ip nor brctl utility not found" >&2
exit 0
fi
ifconfig "$1" 0.0.0.0 up
fi
switch=$(ip route ls | \
awk '/^default / {
for(i=0;i<NF;i++) { if ($i == "dev") { print $(i+1); next; } }
}'
)
if [ -d /sys/class/net/br0/bridge/. ]; then
if [ -n "$ip" ]; then
ip link set "$1" master br0
else
brctl addif br0 "$1"
fi
exit # exit with status of the previous command
fi
echo "W: $0: no bridge for guest interface found" >&2
eth0이 VM과 브리지하려는 인터페이스라고 가정하면 eth0 구성을 제거하고 /etc/network/interfaces에서 다음 구성을 사용할 수 있습니다.
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_maxwait 0
eth0에 사용한 고정 주소를 지정할 수도 있습니다.
각 QEMU 이미지에 대한 VM 이미지가 있는 폴더로 이동합니다. 예를 들어 ARM의 경우:
<your detux folder>/qemu/arm/1/
각 이미지에 대해 "https://people.debian.org/~aurel32/"에 제공된 VM 부팅 지침에 따라 VM을 시작합니다. 그러나 루트가 아닌 사용자인 경우 sudo를 사용해야 합니다.
VM 부팅 명령 (을 원하는 MAC으로 교체):
#x86
sudo qemu-system-i386 -hda qemu/x86/1/debian_wheezy_i386_standard.qcow2 -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
#x86-64
sudo qemu-system-x86_64 -hda qemu/x86-64/1/debian_wheezy_amd64_standard.qcow2 -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
#arm
sudo qemu-system-arm -M versatilepb -kernel qemu/arm/1/vmlinuz-3.2.0-4-versatile -initrd qemu/arm/1/initrd.img-3.2.0-4-versatile -hda qemu/arm/1/debian_wheezy_armel_standard.qcow2 -append "root=/dev/sda1" -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
#mips
sudo qemu-system-mips -M malta -kernel qemu/mips/1/vmlinux-3.2.0-4-4kc-malta -hda qemu/mips/1/debian_wheezy_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
#mipsel
sudo qemu-system-mipsel -M malta -kernel qemu/mipsel/1/vmlinux-3.2.0-4-4kc-malta -hda qemu/mipsel/1/debian_wheezy_mipsel_standard.qcow2 -append "root=/dev/sda1 console=tty0" -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
Detux는 IP 주소와 SSH 설정이 사전 구성된 VM 스냅샷이 필요합니다.
(qemu)
(qemu) savevm init
(qemu) q
루트가 아닌 사용자가 패킷을 캡처할 수 있도록 하려면 Dumpcap에 캡처 권한이 필요합니다. (https://wiki.wireshark.org/CaptureSetup/CapturePrivileges).
다음 명령을 통해 이를 활성화할 수 있습니다.
sudo groupadd -g wireshark
sudo usermod -a -G wireshark <your user name>
sudo chmod 750 /usr/bin/dumpcap
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
권한을 적용하려면 로그아웃 후 다시 로그인하거나 호스트를 재부팅해야 할 수도 있습니다.
패킷을 캡처할 수 없거나 dumpcap 관련 오류가 발생하는 경우 사용자 권한이 올바르게 설정되었는지와 dumpcap 경로가 올바른지 확인해야 합니다.
주 디렉터리의 detux.cfg 파일을 구성해야 합니다. 각 VM 섹션은 올바른 네트워크 매개변수와 SSH 자격 증명으로 구성되어야 합니다. 필요에 따라 root/일반 사용자를 선택할 수 있습니다.
"core" 디렉터리에 있는 Detux 라이브러리를 사용하여 분석 요구에 맞게 사용할 수 있습니다.
리포지토리에는 주어진 바이너리를 분석하고 pcap 폴더에 pcap을 저장하며 지정된 파일 경로에 JSON 출력을 작성하는 "detux.py"가 포함되어 있습니다.
usage: detux.py [-h] --sample SAMPLE [--cpu {x86,x86-64,arm,mips,mipsel}]
[--int {python,perl,sh,bash}] --report REPORT
optional arguments:
-h, --help show this help message and exit
--sample SAMPLE Sample path (default: None)
--cpu {x86,x86-64,arm,mips,mipsel}
CPU type (default: auto)
--int {python,perl,sh,bash}
Architecture type (default: None)
--report REPORT JSON report output path (default: None)
예제:
python detux.py --sample test_script/example_binary1 --report reports/example_report1.json
미리 빌드된 VM 이미지를 제공해 주신 Aurélien Jarno(@aurel32) (https://www.aurel32.net/)에게 감사드립니다.