【実験】Emotet(エモテット)の調査においてSQLiteの性能を確認

1000億回の「あいまい検索」を実施

2022年2月はEmotet(エモテット)が猛威をふるい、当社でも幾つかの案件においてフォレンジック調査を実施しました。
やりたい実験が沢山あるのですがEmotet関連の緊急対応のためなかなか時間を作れず、ウズウズしておりました。
しかしそのEmotetのフォレンジック調査において探求心を活かせるチャンスがあったので、この度の実験を行いました。

Emotet(エモテット)の特徴

Emotetについては様々なWebサイトで詳細が掲載されているので、ここでは詳しく書きません。
(Emotetについて詳しく知りたい方は次の参考リンクのWebサイトをご覧ください。)
【参考リンク】
◆IPA(情報処理推進機構)の注意喚起ページ
https://www.ipa.go.jp/security/announce/20191202.html

◆JPCERT/CC の注意喚起ページ
https://www.jpcert.or.jp/at/2022/at220006.html

Emotetの特徴について、今回の実験に関係することだけに注目しますと、「感染拡大する」というのがEmotetの特徴の一つに挙げられます。

Emotet事案では多数端末のフォレンジック調査が必要

前述の通りEmotetは感染拡大するので、1台でインシデントが発生すると周辺にある別のパソコンも感染してしまう可能性が高くあります。
そのためフォレンジック調査においても1台を調べるだけでは不十分です。
そうすると、パソコンが沢山ある事業所におけるインシデントの場合ですと、そりゃもうたいへん膨大なボリュームの分析処理が必要となります。

プログラムの自動分析では時間がかかりすぎる

当社のフォレンジック調査では基本的に、幾つかの有名な解析ツールを用途ごとに選んで作業します。
9割ぐらいはそれらの解析ツールで十分に事足ります。
そして、解析ツールではできないちょっと特殊な内容の処理を行う場合は、自分でツールを作って(プログラムを書いて)対応しています。

例えば、通常のテキスト検索や正規表現検索ではなく、複数のデータを結合&整形した結果に対して検索するなど、解析ツールでは実現できない特殊な検索を実行する場合などです。
そのようなとき当社では、VBSやJavascriptなどでプログラムを書いて処理をしています。

しかし膨大な量のデータを検索するとなると、通常のプログラムによる分析処理では時間がかかり過ぎてしまいます。
高性能パソコンを使用しても、分析処理に24時間以上かかるようなこともざらにあります。
できる限り早いトリアージが求められるEmotet案件において、時間のかけ過ぎは良くないです。

さてどうしようかと考え、「餅は餅屋」ということで、DB(データベース)でやってみよう!と思い今回の実験を行うこととなりました。

SQLiteを選択

DBは色々な種類があります。
Oracle、SQL Server、MySQL、PostgreSQLなどなど例を上げたらきりがありません。
私が日常的によく使うものもあれば、そうでないものもあります。
DBをどれにしようか迷いましたが、せっかく実験するのだからまだ一度も経験がないDBにしようと思い、「SQLite」を選択しました。
SQLiteで作られたデータベースを「見る」のは日常的ですが、「作る」のは今回が初めてです。

SQLiteは非常に簡単!

SQLiteでデータベースを作るのは、びっくりするぐらい簡単でした。
コマンドラインでササッと作れます。
これは良いです。とても気に入りました。

1000億回の「あいまい検索」を実施

検索した内容を大まかに説明しますと、「Aテーブルの中に、Bテーブルのデータが含まれているかどうか」を検索しました。
次のようなSQL文です。

SELECT * FROM Table_A INNER JOIN Table_B ON Table_A.data LIKE '%' || Table_B.data || '%';

Aテーブルに200万件。
Bテーブルに5万件。
200万 * 5万 = 1000億

途方も無い回数の検索です。

実験結果

実験成功
狙い通りSQLiteでの分析処理に成功しました。

かかった時間はおよそ4時間半
※実験に用いたパソコンはありふれたスペックの事務用PCです。
席を離れている間に処理が終わっていたので正確な時間が分からないのですが、だいたい4時間半ぐらいで完了したと思われます。
1000億回分の処理が、4時間半。
より高性能なパソコンならば、もっと速くする余地もありそうです。
当社の用途としては十分に実用的な性能と言えます。

他のDBだと何時間? 高性能PCだと何時間?

今回の実験環境では4時間半でしたが、環境を変えたらどうなるのか気になります。
DBの種類が異なれば当然に速度も変わるでしょうし、CPUの種類やグレードによっても当然異なるでしょうし。

今回の実験で「実験したい」という欲求を満たすことができましたが、しかし、これによってまた別の実験欲求が生まれてしまいました。
しかし残念、まだまだEmotet等の案件は続くので、しばらく実験はお預けです。