unit42のVVS $tealerに関する記事では、Pyarmorを使用してpythonコードの難読化を行っているという事が記載されていた。
上記のunit42の記事ではPyarmorは難読化解除されているようだが、使用していた暗号化モードだったり、やり方によってはやっぱ解除できちゃうよね。複数回使用したりすれば難しくなるような気がするが、それでも結局Pythonだから仕方ないって感じか?
基本的にはシグネチャ回避の意図で使われるのかね。
Pyarmor
Pyarmorのような難読化プログラムは、用途としてはプログラム著作権保護などを目的として表向きでは使用される。
Pyarmorのホームページでは、
・関数、メソッド、クラス、変数、引数の名前を変更
・ C 関数に変換し、高度な最適化オプションを使用して機械語命令にコンパイルし、不可逆な難読化を実現
といった機能がアピールされている。
githubで公開されているライセンスの他に、購入するライセンスもあるらしい。


Pro以上だったら、もっと解除しにくい良い難読化?
VVS $tealerのようにPyarmorを使っているマルウェアは、他にも確認されている。Batloaderの解説記事を見ると、実際のマルウェアでProが使われているようだ。
・ReaderUpdate
・Amber Albatross
・Batloader
・Zeon Ransomware
Pyarmor難読化解除ガチ勢
じゃあ、Pythonの難読化ならPyarmorが最強なのかっていうと、人気や知名度があるってだけなんじゃないかなと。
そんなPyarmorで作成されたやつの難読化解除を謳っているツールは、いくつもある。
・PyArmor Deobfuscator
・PyArmor-Unpacker
・PyArmor 8 Reverse
ってことは、Pyarmorってボロボロ???ということではない。Pyarmorの最新はver.9系。上記難読化解除ツールはver.8系以上には対応していなかったり、条件が揃わなければ使えなかったり。
ただし、頑張ればver.8系以上/Pro版も解除できるようなので使い方の問題かなぁと思いつつ。Pythonの限界かなとも思う。
・Obfuscated Malicious Python Scripts with PyArmor - SANS ISC
・Notes on Pyarmor BCC Mode | cyber.wtf
・Unpacking Pyarmor v8+ scripts | cyber.wtf
・Unpacking Pyarmor V8+ Scripts: Analyzing A Malware Campaign - Undercode Testing
所感
Pyarmor、マルウェアの解析を防ぐという意味での難読化は微妙だが、バイナリの中身を簡単に解析して検知するようなセキュリティの回避は優秀そう。
セキュリティ製品によっては難読化ツールの特徴量からマルウェア判定したりするが、Pyarmorにフォーカスするものは少ないようだ。
攻撃者にとっては、狙い目ということか。