Qakbot APIHash(2022/6の検体)
はじめに
この記事の内容は2022年6月の検体で確認したQbotについての記事です。
API Hashについて
API Hashとはマルウェアの解析を妨害する手法の一つである。呼び出すWindows APIをハッシュ化しておき、実行時に動的に解決をすることで、そのマルウェアがどういう機能を持っているかがわかりにくくなる。
Qakbotは通信の機能をもっているが、Qakbotの読み込んでいるImport関数やライブラリを見ても、通信に関連するものが見当たらない。通信に限らずAPIを隠すことで解析をしづらくしている。
QakbotのAPI解決の流れ
QakbotのAPI Hashを解決しているコードは次のようになっている。
この部分では次のような処理を行って、APIのアドレスを取得している(実際に渡されるハッシュ値は複数渡されることもあり、最終的にはAPIのアドレスを格納したヒープ領域のポインタが返ってくる)
QakbotのAPI Hashで使われている関数
Qakbot内では、APIの名前をもとに次のような計算を行っている。
①の図中で呼び出しているm_calc_hashが②の処理である。②の関数で計算した値と0x218fe95b
をxorした値が、最初に渡したハッシュ値と一致していれば、APIのアドレスを解決し、ヒープ領域に格納するという処理を行っている。
なお、②で行っている計算はCRC32の処理を少しアレンジしているもののため、ハッシュ値 = CRC32(APIの名前) ^ 0x218fe95b
という計算となっている。
次の図は、API解決をする際に渡されるデータの一部である。
図中の上から4Byteの0x1e4e54d6
はLoadLibraryA
のハッシュ値である。実際に計算をすると、先に示した計算方法とハッシュ値が一致することがわかる。
検体のハッシュ値
- 2022/6の検体:117a60cb0cde4199a78f99d4f6eb5f50