
Open Management Infrastructure 에이전트(일명 "omigod")의 CVE-2021-38647을 학습하기 위한 Vagrant VM 테스트 랩.
Open Management Infrastructure 소프트웨어의 9.6 CVSS 무인증 원격 코드 실행(RCE) 취약점(CVE-2021-38647)을 학습하기 위한 교육용 랩 VM입니다.
공개(원본 연구): https://www.wiz.io/blog/omigod-critical-vulnerabilities-in-omi-azure
OMI 소스 코드: https://github.com/microsoft/omi
뉴스:
관련 글:
진행하기 전에 위의 내용을 일부 읽어보세요.
git clone https://github.com/craig-m-unsw/omigod-lab.git
cd omigod-lab
vagrant up
vagrant ssh
이렇게 하면 Ubuntu 20.04(Focal Fossa)가 설정됩니다. Vagrant 박스를 제공해 준 Roboxes에게 감사드립니다.
Ansible playbook.yml로 설치:
sha256:2e0813ee3f2a71028f071d9933ca2f336faaaf9b6126d5f1767ffcbc7e803279sha256:1cba16e3b307177cbe15bd3fd8a2a87ab8d638846988202be8a17981b5e900c9이 VM을 인터넷에 노출하지 마세요 :-)
Vagrant 덕분에 박스를 기동하면 VM의 5986 포트가 localhost:5986으로 포트 포워딩되어 열립니다. 이제 테스트할 랩 VM이 준비되었습니다.
취약한 OMI 서버에 SOAP 요청을 보내기만 하면 됩니다. Ansible uri 모듈을 사용하여 이 XML 페이로드를 POST할 수 있습니다:
cd /vagrant
ansible-playbook attack-play.yml -e "rcecmd=uptime"
<p:StdOut>에서 uptime 명령의 출력을 볼 수 있습니다.
명령을 id로 바꾸면 uid=0(root) gid=0(root) groups=0(root) 출력을 볼 수 있습니다.
😬😬😬
기타 공개 익스플로잇 코드:
MS의 Getting Started 문서: https://github.com/microsoft/omi/blob/master/Unix/doc/omi/omi.pdf
VM 내부에는 auditd가 설치되어 있습니다.
모든 명령 실행을 로그로 기록:
sudo auditctl -a exit,always -F arch=b32 -S execve -k execve
sudo auditctl -a exit,always -F arch=b64 -S execve -k execve
sudo tail -f /var/log/audit/audit.log
명령 전송 시 출력:
type=SYSCALL msg=audit(1631977306.937:107): arch=c000003e syscall=59 success=yes exit=0 a0=7f906c002570 a1=7f906c001330 a2=7fffe5148108 a3=7f90751453f0 items=2 ppid=8552 pid=9974 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="sh" exe="/usr/bin/dash" key="execve"
type=EXECVE msg=audit(1631977306.937:107): argc=3 a0="/bin/sh" a1="-c" a2="whoami"
type=CWD msg=audit(1631977306.937:107): cwd="/var/opt/microsoft/scx/tmp"
type=PATH msg=audit(1631977306.937:107): item=0 name="/bin/sh" inode=5374016 dev=08:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=PATH msg=audit(1631977306.937:107): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=5377053 dev=08:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=PROCTITLE msg=audit(1631977306.937:107): proctitle=2F62696E2F7368002D630077686F616D69
type=SYSCALL msg=audit(1631977306.937:108): arch=c000003e syscall=59 success=yes exit=0 a0=564c4e436b90 a1=564c4e436b38 a2=564c4e436b48 a3=7f5b83f28850 items=2 ppid=9974 pid=9975 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="whoami" exe="/usr/bin/whoami" key="execve"
type=EXECVE msg=audit(1631977306.937:108): argc=1 a0="whoami"
type=CWD msg=audit(1631977306.937:108): cwd="/var/opt/microsoft/scx/tmp"
type=PATH msg=audit(1631977306.937:108): item=0 name="/usr/bin/whoami" inode=5374366 dev=08:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=PATH msg=audit(1631977306.937:108): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=5377053 dev=08:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=PROCTITLE msg=audit(1631977306.937:108): proctitle="whoami"
누군가 "whoami"를 실행했습니다.
Microsoft는 블로그 게시물 "Additional Guidance Regarding OMI Vulnerabilities within Azure VM Management Extensions"에서 탐지에 대해 이 점을 언급합니다: