タイトルは書き間違いではありません.この記事ではanti-anti-sandbox処理を紹介します.anti-sandbox処理ではありません.
マルウェアの動的解析では,デバッガ,サンドボックス,仮想マシンなどの,プログラムの実行を監視,制御できるシステムがよく利用されます.一部の洗練されたマルウェアは,自身がこれらの上で動いているかどうかをチェックして,もしそうなら悪さをせずに実行を終了したり,ダミー処理を繰り返したりします.また,解析のタイムアウトなどの目的のために,長時間のスリープを実行することもあります.このような処理はanti-sandbox処理と呼ばれることがあります.Anti-sandbox処理とは,マルウェアがサンドボックスの存在を意識してサンドボックスによる解析を回避したり妨害したりするために実行する処理です.
一部の洗練されたサンドボックスは,マルウェアがanti-sandbox処理を実行しているかどうかをチェックして,その処理を失敗させます.すなわち,自身の存在や属性を偽装したり,マルウェアの動作をねじ曲げたりして,解析の回避や解析の妨害の試みを阻止します.
主にマルウェアを解析するために開発されているCuckoo Sandboxでも,anti-anti-sandbox処理が実装されています.Anti-anti-sandbox処理にも,すごくたくさんの種類があります.最も初歩的なものに,サンドボックス環境やサンドボックス内資源の名前などの属性の偽装によってサンドボックスの存在を隠す処理があります.
Cuckoo Sandoxはサンドボックス環境内に見せる資源の名前を以下のように偽装します.
- HDDのID: "ST9160411AS"
- HDDのパス: "IDE\\DiskST9160411AS_____________________________LV14____" と "IDE\DiskKINGSTON_SV300S_________________________541A____" のうちのランダムに選んだどちらか
- CD-ROMのID: "HL-DT-ST RW/DVD MU10N"
- システムBIOSのバージョン: "LENOVO - 3220\u0000Ver 1.00PARTTBL" と "LENOVO - 2020\u0000Ver 1.00PARTTBLX" のうちのランダムに選んだどちらか
- システムの製造者: "LENOVO"
- システムの製品名: "64755N2" か "2241W2U"
- 他にもいくつか
これらの処理は,GitHubにあるCuckoo Sandboxのソースコードの disguise.py というファイルに書かれています.サンドボックスという低レイヤをイメージさせるシステムにもかかわらず,なんとPythonで書かれています.以下は抜粋.
class Disguise(Auxiliary):
...
HDD_PATHS = [
"IDE\\DiskST9160411AS_____________________________LV14____",
"IDE\\DiskKINGSTON_SV300S_________________________541A____",
]
...
SYSTEM_MANUFACTURERS = [
"LENOVO",
]
SYSTEM_PRODUCTNAMES = [
"64755N2",
"2241W2U",
]
...
def patch_manufacturer(self):
...
set_regkey(HKEY_LOCAL_MACHINE, "SYSTEM\\ControlSet001\\Control\\SystemInformation",
"SystemManufacturer", REG_SZ, random.choice(self.SYSTEM_MANUFACTURERS))
set_regkey(HKEY_LOCAL_MACHINE, "SYSTEM\\ControlSet001\\Control\\SystemInformation",
"SystemProductName", REG_SZ, random.choice(self.SYSTEM_PRODUCTNAMES))
...
私の環境で実際にマルウェアをCuckoo Sandbox上で実行したところ,たとえば以下のAPI呼び出しが実行されました.自身を偽装するanti-anti-sandbox処理がちゃんと実行されていることがわかります.
NtQueryValueKey(key_handle="0x0000000000000224", key_name="", value="LENOVO", reg_type=REG_SZ, information_class=KeyValuePartialInformation, regkey="HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\SystemInformation\\SystemManufacturer") = 0
RegQueryValueExA(key_handle=0x50, value="IDE\\DiskST9160411AS_____________________________LV14____", regkey_r="0", reg_type=REG_SZ, regkey="HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\services\\Disk\\Enum\\0") = 0
RegQueryValueExW(key_handle=0x1f4, value="64755N2", regkey_r="SystemProductName", reg_type=REG_SZ, regkey="HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\SystemInformation\\SystemProductName") = 0
Cuckoo Sandboxのサンドボックスの正体はVirtualBoxやKVM上に作られた仮想マシンですが,anti-anti-sandbox処理により,マルウェアが仮想マシンの存在を判断する手がかりを,ほんの少し隠すことができます.でも,その処理は逆にCuckoo Sandboxが下にいることをわかりやすくしていて,逆効果になることも多いような気もします.
参考文献
https://syssec.cs.tsukuba.ac.jp/wp/index.php/work/
- Yoshihiro Oyama. Trends of anti-analysis operations of malwares observed in API call logs. Journal of Computer Virology and Hacking Techniques, Volume 14, Issue 1, pp. 69-85, Springer Paris, Feb 2018. (First Online: Feb 8th, 2017).
- 大山恵弘.マルウェアが実行する耐解析処理の定量的傾向.日本ソフトウェア科学会第34回大会,2017年9月.
- 大山恵弘.マルウェアによる対仮想化処理の傾向についての分析.コンピュータセキュリティシンポジウム2016 論文集,pp. 534-541, 2016年10月.