VBAマクロについての覚書
VBAでネットワーク使う時に、いろいろと制約事項が出て来やしないか?というので調べてた。
結論は以下のとおり
- HTTPリクエスト系は、VBAマクロで普通に書ける
- WinSockを用いたネットワークアプリケーションは、どこでも動くものを書くのは困難(MSWINSCK.OCXが必要だが、このOCXファイルはVB6ランタイムに含まれるらしく、Windows 10で使うのはちと勇気がいる(というか普通には入っていない))。
いろいろと凶悪なBotが出てくる中で、マクロで完結させられるかどうか?の調査をしていたのだけど、とりあえず素の状態でVBAでネットワークを、というのは難しいという結論になりました。
ファイルレスマルウエアは「ファイルは作らない」が、何も作らないわけではない
標的型攻撃に「ファイルレスマルウエア」が使われるようになって久しいが、標的型攻撃を仕掛けるモチベーション(きっかけ/やる気の源)は一体何か?を考えてみよう。
- 仕掛ける相手の持ってる情報が欲しい
- できれば長い期間、情報を継続的に獲得したい
- でも、仕掛ける相手に侵入するのは結構手間
となると、何らかの方法で(だいたいはHTTP/HTTPS経由)情報を持ち出す手段を攻撃を仕掛ける相手に仕込みたいとなる。
ファイルレスマルウエアは、単純にファイルをスキャンするツールではみつからない。
しかし、単にメモリ上にしか存在しないマルウエアは、永続性の観点で不安定である。「再起動したら消える」脆弱な存在だ。
それでは、永続化するためにはどうしたらいいのだろうか。Windows上でファイルレスマルウエアを永続化するのは、(わりかし)容易かなと思う。以下、例えばこんな方法がある、ちうのを挙げていく。
- サービスに登録したPowershell等のワンライナースクリプト
- タスクスケジューラに登録したPowershell等のワンライナースクリプト
別にPowershellに恨みがあるわけではないがw、Powershell上のワンライナースクリプトを用いて外部からプログラムを取得し、それを実行するというのはありうるし、ワンライナーでも結構なことを行える。
さらに、外部に情報を持ち出すときにも(本当にファイルレスならば)一時ファイルを作成せず、「ファイルを読む→HTTPリクエストに読んだ内容を乗せる」という処理を繰り返すし、RATっぽいものも動かして、外部からの制御を受け付けるようC&Cサーバに接続を行わせることも可能だ(今だったらこっちか?)。
ということで、「ファイルを作らない」だけで、痕跡はあちこちに残るため、その痕跡を逃さないために、例えばEDRであったり(端末セントリックだが、ログは集中管理されるのが普通なので、後述するSIEMとも絡んでくる可能性あり)、SIEMであったり(各種ログセントリック)というツールを導入・運用していくという話になってくる。
攻撃者の立場に立って考えると、「永続化」という話は重要なポイントなので、永続化のための手法を押さえておくと、攻撃された痕跡を見つけるのに役立つかもしれない。
ファイルレスマルウエアは「確かに」ファイルは作らない
「本当に」痕跡が残らないと、そもそもどこからも何も検知できないが、実際には検知できているし、そのためのソリューションもある。
じゃあ、どこで検知しているのか?というのを少し考えてみよう。
フォレンジック関係ツールの検証やってみた(少しだけ)
思うところあって、TSURUGI Linuxを使ってみた
TSURUGI Linuxは、デジタルフォレンジック向けのLinuxディストリビューション。
デジタルフォレンジックに使えるLinuxディストリビューションには、例えばKali LinuxやSANS SIFT Workstationなどがあるが、今回あえてTSURUGI Linuxを使ってみたのには理由がある。
- わりかし新しいディストリビューションである
- Acquire向けの機能に絞ったISOイメージを配布している
- 起動するだけであれば、誤ってHDDイメージを壊すことがない
新しいのはまぁいいとして、なぜ2,3が重要なのか?を以下に述べる。
まずは2から。実際にフォレンジックをやったことある人ならば経験ある人もいるかもだけど、HDDイメージを取得する時に、普通に配布されているLinuxディストリビューションではうまくいかない(そもそもブートすらしない)ことがある。
ブートすらしない理由は、経験的にはIA32の拡張機能であるPAE(物理アドレス拡張)が関係していることが多い。PAEをサポートしないCPUでは、PAEを有効にしたカーネルでブートさせられないため、いろいろと小細工が必要になってくるが、TSURUGI LinuxのAcquire用イメージは、PAEなしCPUだろうとCylixだろうとTransmetaだろうと(ブート時のメッセージを読む限りは)サポートしており、わりかし安心して動かせる(速度は遅いがw)。
環境によってはGUIがうまく動かない(画面がうまく出ない)ことがあるが、この場合であってもCtrl + Alt + F1を押下することで、CUIログイン画面が出る。実はThinkPad X31でGUIがうまく動かなかったのだが、Ctrl + Alt + F1を押下し、ユーザ名root、パスワードなしでログインできた。
そして3。TSURUGI Linuxは、起動した段階では(少なくとも)ブートデバイス以外のHDDやSSDは、接続形態を問わず書き込み禁止状態になっている。あとでUSB HDDを追加しても、追加したHDDはかたっぱしから書き込み禁止状態になる。この状態であれば、起動しても(所定のコマンドを知らない限りは)書き込みをできるようにならない。
TSURUGI Linuxでブート後HDDを書き込み可能にするためには?
blockdevコマンドを用いる。
wrtblkコマンドをはじめとして、複数のそれ向けコマンドがあるが、これらのコマンドはシェルスクリプトであり、中でblockdevコマンドを実行している。
詳しくはblockdevコマンドのヘルプをみてもらいたいが、少なくとも書き込み禁止状態を解除するだけならば、blockdev --setrw <書き込み禁止を解除したいデバイスファイル名> とすることで、書込み禁止状態を解除できる。
ファイルシステム作成時とマウント時のblockdev --setrw の範囲の違い
ファイルシステムを作成する時には、作成するデバイス(パーティション)に対応するデバイスファイルのみをblockdev --setrwすればいいが、マウントしたりという時には、そのパーティションが含まれるHDDを指すデバイスファイルもblockdev --setrw しておかないといけない。そうでないとマウント時にread onlyモードにされる。
商用ツールだと、EnCase ImagerやFTK ImagerがTSURUGI Acquireに近いが、多分TSURUGI Acquireのほうが使い勝手がよい
フォレンジックをやる人の中には、イメージ取得にEnCase ImagerやFTK Imagerを使う人も多いと思う。
しかし、EnCase Imagerは入手方法がわからず(私は30分格闘してあきらめた)、FTK ImagerはWindows版は64bit版しか配布されていない。ところが、TSURUGI Acquireの中にはなんとFTK ImagerのLinux 32bitコマンドライン版が含まれている。FTK Imager のLinux 32bit コマンドライン版はなかなかステキな機能がある。個人的には以下の2つがツボった。
- デバイスファイルやraw形式のファイルを入力に指定可能
- e01形式(EnCase形式)で出力可能
もうこれだけでも使う価値がある。
64bitカーネルが動かない/64bit Windowsでないなどの理由でFTK ImagerやEnCase Imagerが使えない場合でも、マシンを落としてOKならば、TSURUGI Acquireを使ってイメージを取得することが可能だ。
TSURUGI Linuxの弱点:とりあえずドキュメント類に乏しいw
まだ出たばかりなのでしょうがないといえばしょうがないのだけど、まだドキュメント類はそんなにない(というかほとんどないw)。まずは自分でいろいろ使ってみて、情報量を増やすのはアリかなと思った。
GPD Pocketを使ってみての所感(その他編)
わりとどうでもいいようなよくないような点をまとめてみた。
- 性能は意外に悪くない。WinSATの結果は、メインで使ってるマシンの1台であるThinkPad Helix(1st Gen、Core i5 3rd Gen)よりちょっと悪いくらい(気が向いたら結果載せます)
- 筐体の加工精度はものすごく高い。閉めたらぴったり閉まる。すげえ気持ちいい。物欲満たされた感になる(個人的には重要)
- 内蔵オーディオ(というかスピーカー)はモノラルだけど、別に気にならない(というか気にする気もない)
- Webカメラは内蔵してないけど、別に不便でもなんでもないのでOK。どうしても必要ならば、これこそUSBカメラつければOKな世界
- USB-CのHUB兼カードリーダーがついたモデルが届いたけど、正直いらなかったかなと感じてる。給電して充電可能なHUBを調達するほうがよっぽどいいかなと思った
GPD Pocketを使ってみての所感(お値段編)
オレの場合は、約400ドル程度の出資でGPD Pocketを入手できたわけですが、出せるのはいくらまでか?と言われると、この使い勝手ならば、たぶん6万円が限度だと思います(500ドルはまぁアリ。600ドルとか言われると、"No, thank you"となりそう)。