시놀로지 백도어의 존재 및 무력화 방법
일전 6.x DSM 때 xpenology 포럼에 들어가 virtio 드라이버 만들어서 컴파일하던게 생각나서.. 간만에 xpenology 포럼에 들어가봤더니 많이 바뀌었더라구요.. 당시에 특정모델 virtio_scsi 드라이버가 아무리 제대로 컴파일해도 DSM에서 인식이 되질않아 결국 포기했던 기억이 나더군요.. ㅎ
어쨌든 살펴보다보니 synology backdoor 토론방이 있더군요.. 내용은..
- 백그라운드 서비스가 업데이트를 확인할 때 "synopkg chkupgradepkg"가 호출됩니다.
- "synopkg chkupgradepkg"가 synowedjat-exec를 시작합니다.
- synowedjat-exec
- 하드웨어 정보를 account.synology.com/wedjat에 업로드
- synowedjat 다운로드 및 추출 .sa, 백도어가 포함된 Synology 아카이브
- 기본 바이너리 "synowedjat protection"을 실행합니다. - synowedjat에는 여러 모드가 있습니다.
- 디버깅 모드(argv[1]에 의해 제어됨)
- "collect" 및 "collect-enc"는 포괄적인 세트를 업로드합니다. 일반 텍스트 또는 암호화된 호스트 정보를 Synology 서버에 전송
- "punish"는 로그인 페이지의 배경을 재설정하고 불법 복제 알림을 보냅니다.
- "protection"이 기본 모드입니다
- /run/ai_tool.cpython-38.pyc를 실행하여 전환합니다. "Active Insight" 패키지 설정을 사용하여 주기적으로
- 포괄적인 호스트 정보 세트를 Synology 서버에 업로드합니다
- 서버의 응답에 따라 "punish" 모드로 들어갑니다.
이게 DSM 7.2 밑의 버전에서는 synowedjat라는 프로세스가 담당했다고 하고, 7.2부터는 dlid라는 프로세스로 이름이 바뀌었답니다.
다행히도.. 찾아보니 선구자 분이 방지하는 스크립트를 올려놓으셨네요.
DSM 7.2 사용자분들은 제일 밑에 있는 Orphée 님이 쓰신 7.2RC용 등록방법을 쓰시면 됩니다. 해놀 사용자분들한테는 필수일거 같습니다.
cf) SA6400 너무 좋은거 같은데 왜 virtio_scsi가 지원이 안되는지 ㅜㅜ, 직접 어떻게 해볼까하고 들어갔다가 발견한 정보입니다. ㅎ SATA, IDE는 너무 느리네요..
좋은 글 감사합니다~ 바로 조치를 취했습니다 ㅎㅎ
제 repo 에 컴파일해서 풀 리퀘스트 하면 반영드리겠습니다. ^^
모듈이 존재는 하는데, 동작을 안하고 있나 보네요?
https://github.com/PeterSuh-Q3/arpl-modules/blob/main/epyc7002-7.2-5.10.55/virtio_scsi.ko
https://github.com/PeterSuh-Q3/arpl-modules/blob/main/src/5.x/drivers/scsi/Makefile#L140
https://github.com/PeterSuh-Q3/arpl-modules/blob/main/src/5.x/defines.epyc7002#L44
https://github.com/PeterSuh-Q3/arpl-modules/blob/main/src/5.x/drivers/scsi/virtio_scsi.c
SA6400 에서 DDSML 모드가 발동이 되야 최소한 이 스크립트가 도는데,
SA6400 은 EUDEV 전용으로만 돌리는 바람에 이 스크립트가 사용되고 있지 않았네요.
그리고 다시 그안에서 SA6400 에 해당하는 커널 5.10.55 버전은 virtio_scsi.ko 를 로딩조차 안하고 있습니다.
금일 SA6400 에 SAS3008 HBA 안정화 시험중인데, 이것 마치는대로 위 DDSML 모드시험도 다시 진행해 보겠습니다.
function virtio_modprobe() {
echo "Checking for VirtIO"
if (grep -r -q -E "(QEMU|VirtualBox)" /sys/devices/virtual/dmi/id/); then
echo "VirtIO hypervisor detected"
/usr/sbin/insmod /lib/modules/virtio.ko
/usr/sbin/insmod /lib/modules/virtio_ring.ko
/usr/sbin/insmod /lib/modules/virtio_mmio.ko
/usr/sbin/insmod /lib/modules/virtio_pci.ko
if [ "${LINUX_VER}" != "5.10.55" ]; then
/usr/sbin/insmod /lib/modules/virtio_blk.ko
/usr/sbin/insmod /lib/modules/virtio_net.ko
/usr/sbin/insmod /lib/modules/virtio_scsi.ko
fi
else
echo "*No* VirtIO hypervisor detected"
fi
}
if [ "${1}" = "modules" ]; then
getvars
listpci
virtio_modprobe
fi
커널 레벨 단에서 드라이버 로딩을 막는거 같아 포기하고 있었는데.. 너무 감사합니다~
저도 이렇게 동작여부를 확인했습니다. 예전에 그렇게 많이 zImage에 기기에 맞는 드라이버를 쑤셔박아도 안되더군요
오늘 SA6400 HBA 와 r8125 안정화 끝내고 virtio_scsi 처리하고 있습니다.
rr 도 마찬가지고 드라이버 자체는 문제가 없는것 같습니다.
모듈로딩결과로 디스크 인식 자체는 잘 들어오고 있습니다.
scsi 3장을 붙였는데, 아래처럼 syno_block_info 정보가 잘 보이고 있습니다.
cat /sys/block/sata*/device/syno_block_info
pciepath=0000:00:1e.0,04.0,01.0
driver=virtio
pciepath=0000:00:1e.0,04.0,02.0
driver=virtio
pciepath=0000:00:1e.0,04.0,03.0
driver=virtio
여기서 2차적인 문제가 SA6400 은 Device-Tree 기반이기 떄문에
다시 disks addon 에서 dtb 파일 매핑처리를 해줘야 합니다.
disks 애드온이 전혀동작하지 못해서 model.dts 와 model.dtb 를 못만들어 내고 있습니다.
그래서 DSM 설치시 디스크가 하나도 없다고 나오는 상태입니다.
rr 도 아직 개선을 못해서 그런거구요.
제가 지금 이부분 수정중입니다.
성공하면 rr 쪽에도 전파드려야 겠네요.
이런식으로 정의를 해봤는데, SA6400 이 못알아 먹는것 같습니다.
흠...
internal_slot@7 {
protocol_type = "sata";
ahci {
pcie_root = "0000:00:1e.0,04.0,01.0";
ata_port = <0x01>;
};
};
internal_slot@8 {
protocol_type = "sata";
ahci {
pcie_root = "0000:00:1e.0,04.0,02.0";
ata_port = <0x02>;
};
};
internal_slot@9 {
protocol_type = "sata";
ahci {
pcie_root = "0000:00:1e.0,04.0,03.0";
ata_port = <0x03>;
};
};
항상 감사드립니다. 잘 안되어도 괜찮습니다~
https://svrforum.com/nas/783066
https://svrforum.com/nas/783276
바로 적용시켜놓았습니다 감사합니다.
cmt alert