@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

ホワイトリストによる通信制限

マルウェアへの感染が発覚した場合、該当端末を一時的にネットワークから隔離し、その後、より詳細に調査を行うという手順が一般的に取られるかと思います。

明確な対応手順が決まってない組織では、ネットワークからの隔離後に色々と操作をしてしまい、せっかく残っていた痕跡を消してしまう事があるようです。

「隔離後は触らずに、次の正しい手順を確認する」としていただけると、その後の対応コストを抑える事ができるかもしれません。*1

次の手順として、セキュリティベンダへ連絡する、というのは時間がかかりますので注意してください。窓口へ連絡し、事情を説明したり、守秘義務契約や対応コストの見積もりを取るなどしていれば、すぐに数時間は経過してしまいます。

必要最低限のことは、自組織内で対応できるようにしておかないと、復旧までの時間が長引きコストが増える事になります。

 

ここ最近の流れとしては、標的型攻撃を受け侵入された事が判明した場合には、感染端末の隔離後、上流でネットワークを一旦遮断する方向になりつつあるようです。

昨今、インターネット接続が完全に遮断されると業務への多大な影響(コスト)が発生しますので、いかに早く復旧していくかが課題になります。

事案発生後、一時的に通信を遮断するとして、その後はホワイトリストに従い安全かつ必要な通信は許可する必要があります。例えばWindows Updateや、ウイルス対策ソフトのアップデートなどは行う必要がありますので、それらに対するWebの通信は許可する必要があります。

ただし、マイクロソフト社へのアクセスを全て許可するというのはお薦めできません。過去にTechnetのフォーラムがC&C通信で利用されていた事があったようですので、マイクロソフト社のサイトでも必要最低限な範囲に絞って通信を許可する方が安全です。

その他、過去にはアプリケーションをアップデートする仕組みが悪用されたケースもありますので、アプリケーションの更新であれば全てホワイトリストに含める、というのは危険です。

 

自社のWebサイトやポータルもホワイトリストへ登録する事は危険です。いわゆる水飲み場攻撃では、安全と考えられているサイトが改ざんされ攻撃に利用されるケースがある為です。

例えば、年金機構に関連した報道の中には、攻撃者が侵入した機器でWebブラウザが保存していたパスワードを搾取する事例について紹介がありました。

最近のマルウェアは標的型に関わらず、感染した機器に保存されている認証情報を収集する機能が備わっているようです、該当機器から漏えいした自社のWebサイトに関する認証情報などが悪用されるケースにも備える必要があります。

Webサイトに限らず、メールサーバへのログオン情報や(個人が利用している)SNSに関するアカウント情報なども保存していれば盗まれていきます。

標的型攻撃によるマルウェアに感染した端末では、これらのパスワード変更も急ぎ必要になります。社外サイトの場合にはそこにアクセスしてパスワードを変更する必要が出てきますが、通信が完全に遮断されているとうまく対応できない可能性があります。

この他、クラウド上のストレージなどを含め様々なサービスがある(便利な仕組みは攻撃者も利用する可能性がある)ので、Webの通信だけを考慮しても、ホワイトリストの整備はかなりのコストがかかる事になります。

 

ホワイトリストの厳格な適用とは別に、侵害範囲の特定、侵害されていない安全な機器を素早く確認し、安全性が確認でき、一定の基準をクリアした機器からの通信は許可する基準や仕組みを構築しておけば、復旧に要する時間や全体コストを下げられる可能性があります。

そして、その基準を考慮する際には、端末機器におけるホワイトリストの整備が必要になってきます。

米国では NIST が National Software Reference Library(http://www.nsrl.nist.gov/)としてハッシュ値を公開しています。しかし、日本国内ではこういった取り組みをどこか国の機関が実施し公開しているというのは聞いた事がありません。

日本国内で流通しているOSやアプリケーションなどのハッシュ値を適宜収集、ホワイトリストとして提供されていると役立つと思うのですが、何処もやらないのでしょうか?

 

 

 

*1:ネットワークケーブルを抜いたり、無線LANを無効化する前に、メモリダンプの取得なり、netstat -nab コマンドを実行しておくと、マルウェアプロセスの特定が簡単になるかもしれません。なお、ネットワークケーブルを抜いた後でもプログラムの実行・通信先がすぐに確認できる仕組みを運用しておくのが理想でしょうか。

メールの添付ファイルを実行禁止にする

年金機構における標的型攻撃による情報漏えい事件を受け、様々な組織で同様のウイルス、マルウェアへの感染が無いか、一斉に点検や対応が行われているようです。

報道発表によれば、一連の攻撃で使われたマルウェアは Emdivi と呼ばれているマルウェアということですが、課題として出てきているのは、「ウイルス対策ソフトで検知できないマルウェアをいかに発見・駆除するか?」という点のようです。

従来は、ウイルス感染が疑われる端末では、まずはウイルス対策ソフトのパターンファイルを最新にし、スキャンを行い検知されたものを駆除するというが基本的な対応手順でした。

頼みの綱であるウイルス対策ソフトが使えない場合、どの様に調べればマルウェア感染を確認する事が出来るでしょうか?

さて、この問題いわゆるパソコン遠隔操作事件でも発生した課題ですよね。あの事件では、犯人が作成した遠隔操作ウイルスを発見できなかった事から、その後は複数のウイルス対策ソフトによるスキャンを実施するようにした県警もあるようですが、果たして見つかるのか?と個人的には素朴に感じた事を思い出します。

もちろん、複数のウイルス対策ソフトを利用しスキャンを行うことで、マルウェアを検出する事が出来る場合もあると思います。

特に、現在各組織が対応を進めていくなかで、新たな検体が発見されればそれはウイルス対策ソフトの開発元ベンダへ提供され、パターンの更新や提供が行われるはずです。これにより、最新のパターンファイルを利用して駆除が可能になるマルウェアもあるはずです。

報道発表があった時点で組織内のPCについて、マルウェアのスキャンを行い何も出なかったから安心している組織は、そろそろ最新パターンでスキャンしてみると良いかもしれません。

以前は発見されていなかったマルウェアが新たに発見できる可能性もありますので、報道発表があった段階でスキャンしたから大丈夫!、とは思わず、時間の経過と共に検出される可能性について考慮しておく必要があると思われます。

「最新のパターンファイルでスキャンし、何も無かったので大丈夫です」と上司へ報告してしまってから、後日、マルウェアを検出すると言い訳が大変そうです。(元々ウイルス対策ソフトでスキャンしても見つからないと言われているのに、スキャンして何も無いから大丈夫としてしまうところに無理があると思いますが)

 

また、いわゆる標的型攻撃と訳されるこの攻撃ですが、元々は APT という表現をされる攻撃タイプかと思います。「Advanced persistent threat」というのが元々の単語ですよね。

英語に弱い私はうまくニュアンスを取れていないかもしれませんが、注目すべき単語は「persistent」だと思われます。この単語の意味を調べると「しつこい」とか「根気強い」などの訳文が表示されるはずです。

つまり、攻撃者(個人か組織かは不明ですが)は継続して攻撃を仕掛けてくるというところに特徴があるわけで、終わりが何時か分からないということです。マルウェアは一時的に駆除できても、攻撃者を駆除する事はできません。

せめて綺麗なお姉さんが、生活苦をなんとかするため、怖い人に脅されて日々せっせとマルウェアを添付したメールを書いて送りだしている...とでも想像したいところです。

 

攻撃者側もウイルス対策ソフトが標的組織で使われている事はよく知ってるでしょうから、ウイルス対策ソフトで検知されないように改良してきます。

これにより、ウイルス対策ソフトを最新パターンファイルで利用していたとしても、感染し侵入されてしまうところに厄介さがあります。

完全には防げないので、「不審なメールの添付ファイルは開かないように!」という事しか言えない状況です。多くの人が思うように「不審」ってどうなら不審なのか?という点には誰も答えてくれないですが。

 

さて、結局のところウイルス対策ソフトは事後的に感染を知る事はできても、完全に防ぐ事は困難ですので、まちがえて添付ファイルをダブルクリックしても影響を受けないようにしておきたところです。

Windows には標準で「ソフトウェアの制限のポリシー」という機能があることをご存知でしょか?

ソフトウェアの制限のポリシーの概要

https://technet.microsoft.com/ja-jp/library/hh831534.aspx

この機能を使うと、指定したフォルダについては、プログラム実行を禁止する事ができます。つまり、電子メールが添付ファイルを保存するフォルダや、テンポラリフォルダについてはプログラムの実行禁止を設定しておけば、間違って添付されていた EXE ファイルをダブルクリックしても防げる場合があるという事です。(添付ファイルを実行制限していないところに保存し、そこで実行すれば感染しちゃいますので、あくまで実行が制限されているフォルダ内でダブルクリックした場合などダメなケースもありますので、完璧ではありません)

 昔からある機能なのですが、なぜかあまり紹介されていることが少ないようですので、この機会に使ってみてはいかがでしょうか?

 ソフトウェアの制限ポリシーを Windows 8 で設定するには、まずローカルセキュリティ設定を開く必要があります。Windows 7 までは管理ツールにあると思いますが、Windows 8.x では下記 URL で紹介されている方法で開く事ができます。

ローカルグループ ポリシー エディターの起動 - Windows8
http://pc-karuma.net/windows8-group-policy-editor/

実際の設定方法については、下記のURLが参考になります。

Windows で特定の名前で実行ファイル、特定フォルダ内の実行ファイルを起動しないようにする方法Add Star
http://futuremix.org/2009/10/limit-program-exe-file

基本的にはパスの規則を使い、実行を制限したフォルダを指定する事になります。

制限しておくとよいフォルダとして、①メールのフォルダ(添付ファイルの保存フォルダを含む)、②ユーザーのテンポラリフォルダ(例 C:\Users\ユーザー名\AppData\Local\Temp)、③Windowsのテンポラリフォルダ、あたりです。例えば、マイドキュメント配下を制限しても困らないのであれば、それらも制限しても良いかもしれませんが、間違えて広く設定すると困るケースがありますので、まずは必要なフォルダ(間違えてダブルクリックするとまずいフォルダ)だけにしておくと良いです。

日々の注意点として、例えば、ユーザーのテンポラリフォルダを制限するとかなり強力な防御になるのですが、逆にソフトウェアがアップデートを行う時に困るケースがあります。

この為、ソフトウェアの制限ポリシーでテンポラリフォルダなどを制限した場合には、各種アプリケーションの自動更新に影響がないかを確認してください。もし、影響がある場合には、アップデート処理を行う時には制限を一時的に解除し、アップデート処理後に再び制限するという運用が必要になります。

また、新しいアプリケーションをインストールする際にも、制限にひっかかるケースがありますので、新しいアプリケーションをインストールする際には、事前にテンポラリフォルダに対する制限は解除しておくと良いと思います。

私はSetup.exeをダブルクリックしてしばらく待って、ああぁぁ制限してた!と思い出すことが良くあります。。。

 

最初、設定方法まで書こうと考えていたのですが、Windows 8.1 Homeだとローカルセキュリティ設定が無いのですね。

(補足)その後、FaceBookのコメントで、AppLockerを利用する方法もあるという情報を頂きました。

AppLocker の技術概要
https://technet.microsoft.com/ja-jp/library/hh831440.aspx

 

kayo-chan.com

雑談:neuro:on ってやはり詐欺なの?

睡眠時間が短くて済みますって宣伝文句に釣られてしまい、プレオーダーで注文してしまったのが1月12日のこと。

その翌日、やはり思い直して1月13日にキャンセルのメールを送ったんですけど、返事がないので時間を空けつつ、6回目 1月30日にやっと下記のメールが届きました。

Aleksandra Siciarz (Intelclinic)

Jan 30, 9:54 AM

Hi,

Sorry for the delay with the answer. Your cancellation inspiring accepted, you can expect the return on PayPal account within one week.

Best regards,

Aleksandra Siciarz
Business Development Manager
Business Analyst
Intelclinic LLC

さて、その後ですが、一週間後どころか一ヶ月経ってますけど返金処理はされていません。2週間くらい待って更に何度もメールはしているんですが、返事なし。

なんか、この会社は日本でも展示会か何かに出展していたようで、上記の返事を書いてた人も居たみたいですけど、個人的にはすっかり騙されちゃったなぁという感じです。

Paypal 経由の支払いを初めて使ったのですが、即時にクレジットカードへ課金されていてキャンセルできなかったのも痛いですが、Paypal経由の支払はこの辺り気を付けないといけないんでしょうかね。

これは結局この後どうなるんでしょうねぇ、キャンセルって扱いで商品も届かず、お金も戻ってこないという事になりそうな予感がしていますが、アップデートがあったらまた書きます。

 <追記>

その後、3/4 になってやっと返金処理したよという返事があり、Paypal からも返金処理のメールが届きました。

 

ブラウザ キャッシュ痕跡を上書きする仕組みが使われたケース

いわゆる、PC遠隔操作事件の中で誤認させる為に?使われた手法には、デジタル・フォレンジック調査で対象になってくる「ブラウザの履歴やキャッシュ情報」について考慮されている部分があります。

【PC遠隔操作事件】ラストメッセージ全文(下)(江川紹子) - 個人 - Yahoo!ニュース より引用

2)キャッシュで罠スクリプトを発見されない工夫

A「直接踏ませるスクリプト。BをJSONPでクロスドメイン読み込みして実行する」

B「CSRFを行う有害スクリプト。Aとは別サイトに設置。」

の2部構成。

Bの側に、1)で書いた制御を入れました。

そして、Aでは、

「Bを読み込んで変数に格納(B1)→Bを再度読み込む(B2)→B1を実行」

というフローで動作します。Bを2回読み込むというのが肝心です。1)の制御により、B1はCSRF、B2は無害スクリプトになります。

永続性記憶装置に保存されるブラウザのキャッシュには、B1はB2に上書きされ、B2だけが残ります。

変数に格納されただけのB1は実行後、DRAMから揮発してしまいます。

ただし再読み込み時、キャッシュ再利用の挙動はブラウザごとに異なります。

IE等では、2回目の読み込みは発生せず、キャッシュから拾ってきてしまいます。(2回目もB1になる。)

 

 上記では、B2の無害スクリプトとされているデータがディスクに残るように意図されていますので、単純にディスクにある該当時間帯の履歴とキャッシュを確認しても、スクリプトの存在は確認できない事になります。

普通にデータ見ただけでは、履歴とキャッシュされている内容から判断していくでしょうから、この段階で何かしらの特異点が他になければ見落としそうな仕組みですね。この点については、松本さんが下記記事の中で指摘されています。

第276号コラム「フォレンジック調査員から見た遠隔操作事件「ラストメッセージ」」 | コラム | デジタル・フォレンジック研究会

 

犯人からのメール内では、IEは再読み込みしてもキャッシュから読み込んでしまうという記述がありますが、IE はキャッシュデータなりの何を基準に更新されていないと判断して再読み込みを行わないのか?という辺り。

IEではキャッシュに関連する設定は「Webサイトデータの設定」にある「インターネット一時ファイル」で制御できますが、デフォルトの設定では「自動的に確認する」という値になっています。この「自動的に確認する」の動作についてはマイクロソフト社の下記記事が参考になります。

Caching Improvements in Internet Explorer 9

http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx

"セッションごとに 1 回" のキャッシュ検証を理解する
http://blogs.msdn.com/b/ie_jp/archive/2011/10/03/10219064.aspx

 IEについてはこの仕組みによる判断で、Bのスクリプトを再度読み込んでも更新されなかったものと推測されますが、サーバB側の設定なりでキャッシュを制御するというのはうまく動作しなかったのかな?という素朴な疑問を持っていたりします。

他のChromeなどのブラウザでは(ローカルにある)キャッシュのリロードをどの様に判断しているのか?という点もありますが、詳細な情報どこかに無いのでしょうか?

 

 いずれにしても、ブラウザのキャッシュファイルは常に更新される可能があるデータです。ここも可能な範囲で分解し、どの様な視点を持つ事ができるのかを整理した方がよいのかもしれません。

  1. キャッシュファイルの作成日時
  2. キャッシュファイルの更新日時
  3. キャッシュファイルのファイルスラック領域
  4. キャッシュファイルを管理しているレコード構造
  5. キャッシュファイルを管理しているレコードが持つ日付情報(Expireなど)
  6. キャッシュファイルの内部構造(Chromeのキャッシュファイル等)
  7. キャッシュファイル内部構造で管理されている日付情報(作成日時など)
    ⇒これパースするフォレンジック系のツールあるんですかね?
  8. サーバ側から与えられるキャッシュデータの生存期間情報
  9. サーバ側から与えられるコンテンツの更新日時
  10. HTTPレスポンスヘッダ
  11. URLフィンガープリント
  12. Webブラウザのリロード処理
  13. Webブラウザのスーパーリロード処理
  14. Webブラウザのキャッシュに関する設定(期間・サイズ)
  15. Webブラウザのシークレットモード(キャッシュを残さない閲覧モード)

 ■ブラウザがキャッシュデータを保持する部分についての参考情報

ブラウザキャッシュのまとめ
http://please-sleep.cou929.nu/browser-caching-tutorial-memo.html

ブラウザのキャッシュを活用する
https://developers.google.com/speed/docs/insights/LeverageBrowserCaching

 

例題「電子メールに添付されたマルウェア」に感染を分解する

例えばトレーニングで「電子メールに添付されたマルウェアに感染」したケースを説明しなければいけないとします。

受講者が事前に学習する必要がある項目には何があるのでしょうか?、関連する技術要素として、どこまで事前に知っている必要があるのか?という点を考えてみたいと思います。

受信した電子メールには圧縮ファイルが添付されていました。この圧縮ファイルにはパスワードが設定されており、展開ツールを使ってファイルを取り出す際にパスワードが求められるようになっており、ウイルス対策ソフトは中身を確認する事ができない仕組みになっています。

圧縮ファイルのパスワードは電子メール本文に書かれており、本文内に書かれたパスワードを入力する事でファイルを取り出す事ができます。取り出されたマルウェアプログラムが人間により“実行”される事でコンピュータがマルウェアに感染する事になりました。

この例を理解し調査する為には、どの程度の知識が必要になるか?を把握したいわけです。まずは、理解が必要な技術的な要素に分解してみます。(項目によっては更に詳細に分割できる項目もありますが、まずは大き目に分解してみます)

項目によっては必須の項目・別に知らなくても困らない項目もあると思います。分解した項目に対して、更に必須項目を絞り込んでいく必要があります。(事前に知っているべき事柄と、上記例題を説明していく際に、何を理解いただくのかは分離して考える必要がありますが)

 

■電子メール関連

  1. SMTPプロトコル(TCP、IP、MACアドレス、ルーティング)
  2. DNS MXレコード(ドメイン名とMXの関係)
  3. メールの配信(MUAとMTAの関係、配信経路、時刻情報)
  4. メールサーバのログ(SMTPログ、時刻情報)
  5. メールアカウント(Userと認証、容量制限、ログイン日時、etc)
  6. メールボックス(POP・IMAPプロトコル、Web経由のアクセス、転送)
  7. メールヘッダ(日付、配信、各種ヘッダ)
  8. メールアドレス(TO、CC、BCC、From)
  9. メールソフトウェア(MUA)
  10. メールソフトウェア毎のメールボックス形式
  11. メールの保存形式(Mbox、PST、EML、etc)
  12. メールボックスの所在(ファイルシステム上のパス又はCloud)
  13. メールボックス内のメタデータ(MAPI情報、作成・更新、フラグ etc)
  14. メールのソースデータ(オリジナルのデータ)
  15. メールを開いた(読んだ)日時
  16. 文字コード(ISO-2022-JP、UTF-8、etc)
  17. 添付ファイル(ファイル名、エンコード形式、MIMEエンコード)
  18. 添付ファイルのタイムスタンプ
  19. 電子メールソフトウェアでの添付ファイルの取り扱い(一時フォルダ)
  20. 添付ファイルをオープン(取り出し)した日時
  21. オープンされた添付ファイルが持つファイルシステム上のタイムスタンプ

■ファイル形式

  1. ファイル名と拡張子(データ内容)、拡張子の種類
  2. ファイル名の長さ、文字コード
  3. 拡張子の表示
  4. 拡張子とアプリケーションの関連付け
  5. ファイル形式(実行ファイル、圧縮ファイル、etc)
  6. 圧縮ファイルとその種類
  7. 圧縮ファイルの作成・展開ツール
  8. 圧縮ファイルのパスワード設定、暗号化
  9. 圧縮ファイル内ファイルのタイムスタンプ
  10. 圧縮ファイル自体のファイルシステム上でのタイムスタンプ(作成・更新)
  11. 圧縮ファイルを展開した際のファイルタイムスタンプ
  12. 実行形式ファイル(OSやアーキテクチャによる違い)
  13. 実行形式ファイル内のタイムスタンプ
  14. 実行ファイルのファイル名偽装方法
  15. 実行ファイルのアイコン偽装

■プログラム実行

  1. プログラムの実行の仕組み(実行方法)
  2. プログラムの権限
  3. プログラムの実行痕跡
  4. マルウェアプログラムの特性
  5. マルウェアの感染痕跡
  6. マルウェアの追跡(発見)

 

前提としてWindowsを想定していますが、スマートフォンを含めていくと更に項目が増えていきますね。

2015年時点での自分的 EnCaseスキルセットを棚卸し(2)

基本的な処理(調査を開始する前に行う下ごしらえ?と言えるのかもしれませんが)に関する項目は以下でしょうか。

主にはファイルの種類を特定したり、既知ファイルを除外する、検索を行い関連するデータを特定するといった部分になり、アーティファクトのパースなどは含んでいません。

 

■シグネチャ分析

  1. ファイルタイプの定義内容の理解(ヘッダ・フッタ パターン、サイズ、カテゴリ)
  2. 既存のシグネチャタイプをカスタマイズして利用する(シグネチャをカスタマイズする事でより分類を詳細に行う)
  3. 自分で必要なシグネチャをファイルタイプに登録・テストする
  4. 予め定義されているファイルタイプで不要(ノイズ)となるパターンの変更
  5. シグネチャ分析の実行(Evidence Processor又は選択対象に対して手動実行)
  6. シグネチャ分析結果の確認とフィルタ(コンディション・フィルタの利用)
  7. ファイル拡張子が変更されているパターン(エイリアス)の確認・フィルタ
  8. シグネチャ分析の結果がマッチするケース(TXTなど)の理解
  9. シグネチャ分析の結果がBadまたはUnKnownになるデータ内容の理解
  10. ファイルが暗号化されているパターンをシグネチャ分析の結果から確認する
  11. ファイルシグネチャを利用したUnallocated Clustersからのカービング
  12. File Carverモジュールを利用したファイルのカービングと制限事項
  13. File CarverモジュールのOptimizedオプションの利用方法
  14. ZIPファイルのカービング(破損データの修復)
  15. Recover Foldersにより表示されているファイルに対するシグネチャ分析実行による破損ファイル等の検出・フィルタ
  16. 拡張子が変更されていた画像ファイルのギャラリービューでの閲覧(シグネチャ分析の実施後)

■コンパウンド(複合)ファイルの取り扱い

  1. EnCaseでマウント可能な複合ファイル、マウントできない複合ファイル(LZH etc...)の理解
  2. View File Structure のマウント時のオプションに関する理解(Unallocated Clustersの計算、削除メールの検索等)
  3. EnCaseがマウントに失敗したファイルの特定(原因の確認)
  4. 複合ファイルに含まれるファイル名が文字化けする場合の原因と対処方法
  5. Evidence ProcessorのExapnd compound filesが対象とするファイルタイプの理解(レジストリは対象外となる)
  6. パスワード付きZIPファイルのマウント(パスワードを入力したかった場合、Secure Storageへのパスワード登録)

■パスワード保護・暗号化されているファイルの分析

  1. Evidence ProcessorのAnalyzing Protected(Passware Toolkit)を使った保護ファイルの検出
  2. 検出された保護ファイルの確認(フィルタ)
  3. Passware 連携機能の理解
  4. エントロピー値の計算手順

■ハッシュ分析

  1. 既知ファイルからハッシュセットの作成
  2. ハッシュセットに含められるメタデータの理解
  3. ハッシュ分析の実行(ハッシュセットの選択)
  4. NSRL、NSRLJP の利用手順の理解
  5. 既知ファイルのハッシュセットを利用したファイルの除外
  6. 既知ファイルのハッシュセット、ハッシュ値を利用したファイルの特定

■RAW キーワード検索

  1. RAWキーワードの登録と適切なCode Page設定の理解
  2. RAWキーワード検索ではヒットしないデータタイプや文書ファイルタイプの理解(ZIP, DOCX, PDF, Base64,Protected Files etc...) 
  3. RAWキーワードとして日本語文字列を検索する場合に指定する適切な Code Page の理解(932,51932,20221 etc...)
  4. RAWキーワードの一括登録(Code Page 指定含む)
  5. RAWキーワード検索の実行・結果(ヒット)の確認
  6. GREP パターンの登録・事前検証

 ■インデックス検索

  1. インデックスが作成される仕組みの理解(Outside In、Transcript、文字化け)
  2. インデックスされるデータ範囲の理解(メタ、本文、対象文字コード、埋め込みデータ部分)
  3. 圧縮ファイル、PDFの添付ファイル、メールの添付ファイルなど他のデータを含んでいるデータに対するインデックス処理の理解
  4. インデックスされない(検索できない)ファイルタイプやデータ内容に対する正しい理解
  5. インデックスされない(されていない)ファイルの検出・フィルタ
  6. 日本語を含むアジア言語を含むデータのインデックスオプションの設定
  7. 日本語文字列に対するインデックス段階での正規化処理の理解(カタカナ、濁点・半濁点、全角英数の処理)
  8. 日本語文字列を利用したインデックス検索と、ハイライトの関係(正規化処理の影響)
  9. 日本語文字列の形態素解析(ワードブレイカーの動作)の理解
  10. 中国語・韓国語に対する形態素解析と正規化処理の影響の理解
  11. インデックス内容のエクスポート(IndexDataExtractor)

 

2015年時点での自分的 EnCaseスキルセットを棚卸し(1)

EnCase を使い始めてかなりの年数が経過していますが、他のツールも使うようになりつつあるので、一度 EnCase に対して(自分にとって)必要な項目を棚卸ししてみたいと思います。まずは、データの取得から表示辺りまで。

 

■インストール・設定・ケース作成

  1. 最新版EnCaseのダウンロード&適切なインストール
  2. EnCaseが利用するフォルダパスとそれぞれの役割理解
  3. ダウンロードしたCertファイルの役割と配置方法
  4. EnCaseの起動モード(AcquisitionとForensics)の違いについての理解
  5. EnCase のバージョン番号や追加モジュールの有無をHELPから確認
  6. Options⇒Globalタブの設定項目についての理解
  7. Options⇒Code Page設定の役割と、各OSに応じた設定すべきCode Pageについての理解
  8. Options⇒Code Page設定が誤っている場合に発生する、文字化け範囲の理解
  9. Options⇒Flag Lost Filesの設定に関連するFATファイルシステムの仕組の理解
  10. Options⇒Dateタブで日付形式の設定や表示方法の変更。
    曜日表示、タイムゾーン表示の設定変更。
  11. Options⇒Colors上の配色変更、それぞれの色がどこで使われるかの理解
  12. Options⇒Fonts設定で多言語を表示する為の変更、Arial Unicode MS の役割理解
    フォントセットとCode Pageの役割理解
  13. Options⇒Data Pathタブの内容理解
  14. 新規ケースの作成方法(ケースフォルダの適切な配置)
  15. Evidence Cacheフォルダの役割理解
    セカンダリEvidence Cacheの役割理解
  16. バックアップ設定の理解と適切な設定
  17. バックアップ対象と制限事項の理解
  18. バックアップからのリストア手順の理解

■イメージコピーの取得・証拠ファイル形式

  1. 証拠ファイル形式についての理解(E01,Ex01)
  2. 論理証拠ファイル形式についての理解(L01,Lx01)
  3. 証拠ファイル形式の内部構造の理解(CRC,ハッシュ値)
  4. 証拠ファイルの作成時に設定するオプション項目の理解
  5. 証拠ファイルの圧縮方式の違いと、コピー速度への影響についての理解
  6. 証拠ファイルのパスワード設定と暗号化の違いについての理解
  7. イメージコピー作成中の中断処理と再開処理の理解
  8. イメージコピー作成中に発生するエラー処理と設定の理解
  9. 証拠ファイルのベリファイ手順・処理の理解
  10. 証拠ファイルのベリファイ処理でエラーになった場合の対処
  11. 証拠ファイル・イメージファイルの手動でのハッシュ計算
  12. 証拠ファイルの再取得・圧縮方法
  13. 証拠ファイルをRAW形式へ変換する
  14. 物理ディスク・論理ボリュームの取得
  15. デバイス追加時、Edit 画面で設定可能な項目の理解
  16. RAIDボリュームの取得
  17. 暗号化ディスク・暗号化ボリュームの取得
  18. 稼働中システムの取得
  19. RAW形式を証拠ファイル形式へ変換する
  20. FastBloc SEの利用方法&書き込み禁止措置の理解
  21. HPA・DCO設定と対応方法に関する理解
  22. Linenの利用方法(OS起動メディアの準備)
  23. サーブレットの作成手順、Direct Network Previewの利用方法
  24. サーブレットを使ったメモリイメージの取得方法
  25. Winenを使ったメモリイメージの取得方法
  26. Winacqを使ったディスクイメージの取得方法
  27. WIPE機能の利用方法
  28. イメージファイルの物理ディスクへのリストア方法

■ケースへの証拠ファイル追加(Add Eviddnce)

  1. プレビューとイメージ閲覧の違いの理解
  2. ローカルディスクのプレビュー方法
  3. サーブレットを使ったプレビュー方法(Direct Network Preview)
  4. クロスケーブルを使ったプレビュー方法 (Crossover Preview)
  5. RAW形式イメージファイルの追加(DD、ISOイメージ等)
  6. 証拠ファイルの追加
  7. GUIDとEvidence cacheファイル内の関係についての理解
  8. Singleファイルの追加(Singleファイルの制限・注意事項)

■パーティション・ボリュームの追加・閲覧・コピー

  1. ドライブ文字の付与ルール、ドライブ文字の変更方法
  2. デバイス・ボリュームの詳細情報確認(レポート)
  3. 未使用範囲の確認
  4. (削除)パーティションの追加・削除
  5. (削除)パーティションの検索(VBRの検索)
  6. バックアップVBRを利用したパーティションの復元
  7. BitLocker暗号化ボリュームの追加
  8. RAIDボリュームの再構成手順
  9. LVMボリュームの再構成手順(Scan for LVM)
  10. EFS暗号化の利用確認(Description)と対応(Analyze EFS...)
  11. Windows タイムゾーンの確認方法(SYSTEMレジストリ)
  12. Linux タイムゾーンの確認方法
  13. Mac OS X タイムゾーンの確認方法
  14. タイムゾーンの設定、反映確認方法
  15. FATボリューム上の削除ファイルにおいて、日本語だと先頭が正しく扱われないケースへの対応
  16. FATボリュームのボリューム名が文字化けする場合の確認方法
  17. FATボリューム上のInvalid Cluster表示に関するクラスタ開始位置に関する理解
  18. Unallocated Clusters の意味と役割の理解
  19. VFSを利用した(仮想的な共有ドライブを通じた)エクスプローラからのデータアクセス
  20. PDEを利用した(仮想的な物理ディスクを通じた)エクスプローラからのデータアクセス
  21. PDEを利用した VSS (以前のバージョン)へのアクセス
  22. Copy Files/Copy Foldersを利用したファイルのコピー方法、コピー範囲、ファイルの連結、フォルダ構造を維持したコピー、重複ファイル名の扱い、長いパスの扱いについての理解
  23. Copy Files/Copy Foldersを利用したファイルコピー時のタイムスタンプ維持についての理解
  24. Copy Files/Copy Foldersの設定において、分割サイズを0に設定しておくことで分割を行わずに取り出す
  25. Copy Files/Copy Folders の対象に $BadClus;$Bad は含めない意図の理解
  26. View File Structureを使ったコンパウンドファイルのマウント手順
  27. View File Structureでマウントしたコンパウンドファイルのアンマウント手順
  28. デバイスのキャッシュファイル削除方法と影響の理解

■削除ファイルの取り扱い

  1. 削除ファイルに関連したアイコン、関連カラムの表示内容の理解
  2. 削除ファイル(Overwritten)の上書きファイルの名前確認と参照方法
  3. Lost Filesに含まれるファイルの意味(親が不明)とファイルシステム側での仕組みの理解
  4. Recover Foldersの手動実行と結果セットの削除方法
  5. Recover Foldersの役割(対象範囲)とNTFS・FATファイルシステム上での仕組みの理解
  6. Recover Foldersを実行した場合の、Unallocated Clusters への影響(該当クラスタの取り扱い)
  7. 削除ファイルの上書き判定(先頭クラスタによる判断)の理解
  8. FATボリューム上での削除ファイルの先頭ファイル名の取り扱い
  9. FATボリューム上での削除ファイルのサイズ(データ範囲)の取り扱い
  10. ゴミ箱フォルダへのファイル移動時に発生するNTFS上の変化についての理解
  11. ゴミ箱フォルダへのフォルダ移動時に発生するNTFS上の変化についての理解
  12. ゴミ箱フォルダ内データの表示ルール($I、$Rの取り扱い)
  13. ゴミ箱フォルダ内ファイルの削除日付の扱い
  14. ゴミ箱フォルダ内ファイルのオリジナルパス($Iとの関連、$Iが無い場合)
  15. ゴミ箱フォルダ内 INFO2 ファイルのデコード、スラック上の取り扱い
  16. ゴミ箱フォルダ内のSIDとユーザー名の紐づけ(SID、RID、プロファイル)
  17. スラック領域の表示色と範囲の理解(各スラック領域)

■画面表示

  1. セットインクルードとブルーチェックの役割理解
  2. ディクソンボックスの役割理解
  3. GPSバーに表示される各項目の理解
  4. GPSバーのLE値を使った範囲の選択
  5. GPSバーのFO, SO 値を使ったオフセット位置の確認
  6. 各カラムが表示する内容の理解
  7. テーブルペイン上カラムの表示列のロック方法・解除方法
  8. テーブルペイン上カラムの非表示設定
  9. テーブルペイン上カラムのソート方法・解除方法、6段階でのソート追加
  10. テーブルペイン上カラムの並び順の変更
  11. 特定のカラムに対応したビューペイン上のタブについての理解
  12. ビューペイン上にある各タブが表示する内容の理解
  13. ビューペイン上にあるDocビューとTranscriptタブの役割の理解
  14. ビューペイン上Textタブでの日本語(CJK)表示方法
  15. ビューペイン上TextタブでのShift_JISやUnicodeを指定した場合に、文字列が2バイト単位で扱われている方法の理解(折り返し位置で化ける場合)
  16. ビューペイン上Textタブで、複数文字コードのデータが混在する場合の表示
  17. 日本語文字列を表示する際に利用するCode Page番号の理解
  18. Outside Inの役割と制限事項の理解
  19. Go To 画面の使い方(数値変換、マイナス値非対応)
  20. ビューペイン上 Decode タブを利用したデータの変換方法
  21. ビューペイン上 Picture タブでの画像表示(Options設定との関係)
  22. ビューペイン上 Picture タブがサポートする画像ファイル形式
  23. ビューペイン上 Picture タブの画像表示制限(レイヤーを扱えない)
  24. ビューペイン上 Attributes タブの役割(表示内容)の理解
  25. ビューペイン上 Console の役割と表示される項目の理解
  26. ビューペインの取り外しと、戻し方
  27. ギャラリービューの制限事項(シグネチャ解析後でなければ拡張子に依存して画像を表示)
  28. ギャラリービューのレンダリング順序変更(Optionsでの設定変更)
  29. ギャラリービューにおける破損画像の取り扱い(Optionsでの設定変更)
  30. テーブルエントリでアイテムをダブルクリックした時の動作(呼び出されるアプリケーションとの関連付け)
  31. 外部ビューアの登録と呼び出し方、外部ビューアで扱う為の一時ファイルの取り扱いについての理解

 

 

2015年に取り組むにはちょっと出遅れかもしれないテーマ SQlite3 と Cloud

すでにエッジな話題ではなく、ツールなども充実してきているのであまり斬新な分野ではないですが、もし今年からデジタル・フォレンジック始めました!みたいな若者に「これやっとけ」と言うなら、個人的には SQlite3 でしょうかね。

まぁ、正直あまりいけてないテーマかなぁという気もするのです。実務的な部分では役立つ項目でしょうし、データベースの基本的な技術知識は他でも役立つだろうという、ちょっと保守的なテーマですけど。

SQlite3 はデータベースですので、残っているファイルを調べる部分についてはそれほど難しくないかもしれませんが、トランザクションログや、削除データの抽出といった部分はまだ少しこなれてない部分でしょうか。

また、Webブラウザやスマートフォンアプリの多くがデータの収納先として利用していますので、色々なデバイス上のデータについて理解を進める事ができそうなのも、お薦めとしている理由の一つでしょうか。

データはどんどんクラウド側に移行していますが、それにアクセスする端末やアプリケーション(Webブラウザ)には部分的には痕跡が残っており、それが SQLite3 を使っているケースも多い気が個人的にはしています。(平たく言うと、Cloud Forensics の入口としては丁度よくね?という意図だったりもします)

いずれはSQLite3ではなく、別の仕組みが利用されるようになる気もしますので、10年後でも役立つ技術かは、2025年になってこの Blog を読み返してみないと分かりません(笑)

挑戦するなら最初からエッジな分野がいい!という野望をお持ちでしたら、Cloud Forensics に突入するのも選択肢の一つでしょうか。

もし自分だったら、NIST が出している資料をベースに、課題となっている項目を確認していくアプローチをとるかもしれません。Cloud といっても、基本的にはドキュメント ライフ サイクルをベースに考えて取り組む必要があるというのが個人的な印象です。

将来的には、FATやNTFSとか読む必要がなくなり、全部 Cloud です!っていう世界であれば、ファイルシステムよりそっちを優先して取り組む方が、今からの若手にはあってそうな気がしている今日この頃です。

 

Windows レジストリ アーティファクトの参考書籍、2015年ならどれ?

Windows レジストリのアーティファクトについて良い本はないですか?という質問も良くいただく質問だったりしますが、日本語の書籍や関連資料ですぐに思いつくものがなく、良い回答が出来ていないと個人的に感じている部分だったりします。

Windowsのレジストリに特化している書籍としては洋書になりますが、RegRipperの著者Harlan Carvey氏の「Windows Registry Forensics」があります。先日、Blogの方にこの書籍の改定についての話題が出ており、(2015年中に出るかは分かりませんが)改訂版が出るようですので、これはちょっと期待してしまいます。 

Windows Registry Forensics: Advanced Digital Forensic Analysis of the Windows Registry

Windows Registry Forensics: Advanced Digital Forensic Analysis of the Windows Registry

 

 Windowsレジストリについては、書籍から入るよりも RegRipper がパース対象としているデータ項目として何があるのかを丁寧に見ていくのが一番参考になるのではないでしょうか?、RegRipper を実際に使ってみて、対象レジストリキーや値、その出力結果を読み解いていくのが参考資料としては良い気がしています。

RegRipperはパースする対象とプラグインによっては日本語文字列の扱いに問題があり、出力結果が文字化けしたり、そもそも処理段階で欠落する事があります。(日本語が関係ない場合には、それも特に困らないと思います)

RegRipperをベースに、Unicodeの処理を適切に行うように改良したものとしては、KaniRegがあります。KaniRegは基本的にRegRipperベースですが、プラグインの処理で日本語の扱いに問題がある箇所を極力対応できるようにしてくれています。極力と書いているのは、元々のプラグイン側での処理が適当だとカバーしきれず限界があるところもあり、そのあたりはReadmeの制限事項などから読み取れます。

下記はKaniReg 1.1.2 のReadmeから部分的に引用していますが、稀に誤ったパスが出力されるケースがあるなど、注意しておくべき項目があります。(これをKaniRegだけの制限と考えるべきではなく、他のパースツールでは同様のエラー発生時に実装をどうしているのか?ということを考慮する必要があります)

【ShellBagについて】
■RegiRipperの動作・仕様
・対象ハイブ:XP→NTUSER.DAT、Vista以降→UsrClass.dat
・Vista、Win7、及びWin2008R2のみに対応(bit数は記載なしのため不明)
・処理中にパースに失敗しても処理を継続する仕様のため、稀に誤ったパスが出力される可能性あり。
 (正:C:\AAAA\BBBB¥CCCC → BBBBが取得不可の場合の出力:C:\AAAA\CCCC)

■KaniRegの動作・仕様・RegRipperとの相違点など
・XP及びWin8のパースに暫定対応(Win7と共通する構造のキーのみパースされる)。
・XP及びWin8でパース未対応のデータを検知出来た場合、「パース不可」の文言を挿入。
 (出力例:「C:\AAAA\パース不可\CCCC」)
・XPの一部のデータにて、文字化けを確認済み。(Win7との構造の相違が原因?)
 →切り出すデータが長過ぎるため、本来文字でない余ったバイトがデタラメな文字に変換される。
 (出力例:「デスクトップ」が「デスクトップ獀敨汬㈳搮汬」となるなど)

 

レジストリではUnicode(UTF-16LE)でデータが保存されているのが通常です、最近のツールは Unicode 対応により文字化けせずに対応できる場合もありますが、日本語を必要としていない作者の場合、英数字以外はゴミとして落としているケースもあります。

この為、出力結果が正しいか?という点では、目視での確認や検証も必要になります。レジストリのキーや値を解釈して表示しているので、パース結果に誤りがあるかはレジストリエディタなりで自分で確認できます。値がバイナリデータで構造を保存しているケースでは、目視でパースする必要が出てきますが、慣れていないと厄介かもしれません。

 

これから取り組む若手に言えることがあるとすれば、一種類のパース結果だけで信用せずに、2種類、できれば Unicode 対応しているツールで比較を行った方がよいよ、という事くらいかと思います。(商用製品になりますが、個人的には TZworks の出力結果は化けないので結構気にいっています)

基本的には諸先輩方が必要な項目はパースするようなツールを提供してくれていますので、自力でレジストリ内のバイナリデータをパースしなければいけない領域はかなり限られると思いますし、その場合でも Google で検索すればすぐに答えが出てくるのではないでしょうか。

レジストリを今から深く探求したい!といったモチベーションがある場合には、新しく出る Windows 10 辺りのレジストリがどの様になっているかを調べ、従来値との比較結果を世界にフィードバックすると喜ぶ人が多いのではないでしょうか。(プログラム実行に関連した部分からまずは着手とか)

特にバイナリ値でデータ構造が変化している箇所があれば、その中身をいち早く解析する事は面白いネタにもなると思います。

ただ、日本語で書いても反応ないと思いますから、英語でBlogに書いて、英語で Twitter に投げておくと拾ってくれる可能性が高まります。

 

2015年でも文字コードの書籍を読むべきか?

デジタル・フォレンジック関連では、海外で作られた製品やツールを利用する事が多く、これまでいわゆる「文字化け」にはかなり苦労させられてきました。*1

とはいえ、2005年頃と比較すれば、解析対象データの多くが UTF-16 や UTF-8 になってきている事もあり、以前と比較すればかなり文字化けは解消されている部分もあるのではないかと考えています。

この為、これから取り組む若手が優先的に文字コードを覚える必要があるか?というと個人的には少し疑問があります。もちろん、知らないよりは知っている方がよいですし、何より文字化けが無くなったわけではないので、正しい手順や適切な対応を取る上で文字化けの原因を的確に判断できる方がよいですよね。

まずはUnicodeの基本的な部分が理解できていれば良いのかもしれません。最近は例えば Shift_JIS でデータ格納しているのを、UTF-8だと思って処理して落ちるとか化けるとかのパターンが多いようですから、そのあたりだけまずは理解できれいれば慌てなくても対処できる気もします。

Unicode関連の書籍も色々とありますが、今だと何を読むのがいいんでしょうねぇ、多分 Google で検索すれば色々と情報があると思いますから、強いて書籍でなくてもよいかもしれません。

Unicode については、個人的には下記を読みましたがいきなりこれではない方がよいかもしれません。図書館にあればちょっと見てみるのは良いと思うのですが、2001年の本なので、今からだと違いを意識しないといけない部分があるかもしれませんね。(最近は、絵文字もありますし)

Unicode標準入門

Unicode標準入門

 

個人的にはMLなどを通じて文字コードについて教えていただき覚えた部分が大きかったのですが、参考書籍としては文字コード関連はほとんど購入しました。

文字コードといえば CJKV !!という雰囲気がありましたが、いきなりこれ読むのは初心者には難しいのではないかと思います。外人さんに文字コード関連の書籍で何かないか?と聞かれたらこれをお薦めしていました。

図書館にあればちょっと眺めてみるといいかもしれません。 

CJKV日中韓越情報処理

CJKV日中韓越情報処理

 

 個人的に一番分かりやすかったのは、文字コード「超」研究です。現在は改定されているようで手元で持っていた版とは異なりますが、著者の書きっぷりが面白い部分もあって読みやすかったです。なんか文字コード関連の書籍は分厚いの多い気がしていますけど、避けられない運命なんでしょうか。 強いて何か読むのをお薦めするなら、これかなぁ。プログラマのための文字コード技術入門も良かった気がしていますが。。。

文字コード「超」研究 改訂第2版

文字コード「超」研究 改訂第2版

 

 あと、文字コード関連で一番読んだWeb上の記事は「文字の海、ビットの舟」ですね。

小形克宏の「文字の海、ビットの舟」
―― 文字コードが私たちに問いかけるもの
http://internet.watch.impress.co.jp/www/column/ogata/

文字コードは、なんだかんだ言っても CPCONV で HEX パターンを見ながら実際に検索とかして覚えた気がします。今は HEX で検索する必要性がほとんどなく、コードページ指定すれば済むか、そもそも意識しなくて良いツールも多いので、出番が減っていますが、トレーニングではよく紹介しています。

CPCONV で HEX 見て、istrings で文字列を取り出す、wiconv でCodePageを変換。なんかそんな事を繰り返していたらだいたい覚えた!という気がしています。

でも、今の若者はそれらのツールで試したり、文字の取り出しに悩んだりしなくても多分大丈夫です(笑)

 今から取り組む若手がやった方がよい部分があるとすれば、インデックス処理(形態素解析とかN-Gram)の理解と、機械学習の辺りでしょうか。

大量文書から必要なデータを効率良く探し出すという部分では、学習させた内容で類似文書をひっぱるとかそのあたりの技術が今後どんどん使われると思いますから、そっちから入る方が良いのかもしれません。つい最近も Microsoft 社が Equivio を買収しましたが、Equivio がどういった技術か?とか見ておくと面白いかもしれませんよ。

 

*1:もちろん今でも苦労されている方が多数いらっしゃるのは承知していますが