SECCON 2016 Online CTF Writeup - Memory Analysis

# Memory Analysis (Forensics, 100pts)
メモリダンプのデータが渡されるので、解析結果からWebサイトにアクセスせよ。との問題です。

## 解析ツールを入手
> Hint1: http://www.volatilityfoundation.org/

出題ページのヒントを元に、Volatilityを導入しました。
メモリダンプ等を解析可能なフォレンジックツールです。サイトの「Releases」→「2.5」から辿って入手できます。

## メモリダンプ解析
以下のサイトを参考に、各オプションを使用して解析を進めました。
[「Volatility Frameworkを使ったメモリフォレンジック」と言うハンズオンに参加させて頂きました。 ｜ Developers.IO](http://dev.classmethod.jp/study_meeting/volatility-framework/)

`imageinfo` でOS情報等を取得

```bash
$ vol.py -f forensic_100.raw imageinfo
Volatility Foundation Volatility Framework 2.5
INFO    : volatility.debug    : Determining profile based on KDBG search...
          Suggested Profile(s) : WinXPSP2x86, WinXPSP3x86 (Instantiated with WinXPSP2x86)
(後略)
```

`pstree` でプロセス一覧を取得

```bash
$ vol.py -f forensic_100.raw pstree
Volatility Foundation Volatility Framework 2.5
Name                                Pid   PPid   Thds   Hnds Time
--------------------------------- ------ ------ ------ ------ ----
 0x8231f698:explorer.exe           1556   1520     15    466 2016-12-06 05:27:10 UTC+0000
 0x823c8660:System                    4      0     58    259 1970-01-01 00:00:00 UTC+0000
. 0x81a18020:smss.exe               540      4      3     19 2016-12-06 05:27:04 UTC+0000
.. 0x82173da0:winlogon.exe          628    540     24    541 2016-12-06 05:27:07 UTC+0000
... 0x8216e670:services.exe         672    628     15    286 2016-12-06 05:27:07 UTC+0000
.... 0x81f65da0:svchost.exe        1776    672      2     23 2016-12-06 05:27:10 UTC+0000
..... 0x8225bda0:IEXPLORE.EXE       380   1776     22    385 2016-12-06 05:27:19 UTC+0000
...... 0x8229f7e8:IEXPLORE.EXE     1080    380     19    397 2016-12-06 05:27:21 UTC+0000

(一部略)
```

`connections` で通信の一覧を取得

```bash
$ vol.py -f forensic_100.raw connections
Volatility Foundation Volatility Framework 2.5
Offset(V)  Local Address             Remote Address            Pid
---------- ------------------------- ------------------------- ---
0x8213bbe8 192.168.88.131:1034       153.127.200.178:80        1080
```

Windows XP上で、153.127.200.178:80 にコネクションが張られています。
80番ポート=HTTP ですので、IEからWebサーバにアクセスしているようです。

## Internet Explorerの履歴を取得
さらに調べていたところ、 `iehistory` でIEの履歴を取得できるようです。

```bash
$ vol.py -f forensic_100.raw iehistory
Volatility Foundation Volatility Framework 2.5
**************************************************
Process: 1080 IEXPLORE.EXE
Cache type "DEST" at 0x201ca83
Last modified: 2016-12-06 14:28:40 UTC+0000
Last accessed: 2016-12-06 05:28:42 UTC+0000
URL: SYSTEM@http://crattack.tistory.com/entry/Data-Science-import-pandas-as-pd
Title: Security &amp; Reverse :: [Data Science] Pandas - \),
```
`http://crattack.tistory.com/entry/Data-Science-import-pandas-as-pd` にアクセスしてみたところ、ハングル文字の技術ブログが出てくるのみでflagらしき文字列は見当たりません。

## hostsの取得
>Hint2: Check the hosts file 

ここでヒントを思い出し、hostsファイルを探すことにしました。
参考にしたサイト(PDF) : [CheatSheet_v2.4.pdf](http://downloads.volatilityfoundation.org/releases/2.4/CheatSheet_v2.4.pdf) の 3ページ 7段目


`filescan` でダンプ内のファイル一覧を取得し、`grep hosts`で絞り込みます。

```bash
$ vol.py -f forensic_100.raw filescan | grep hosts
Volatility Foundation Volatility Framework 2.5
0x000000000217b748      1      0 R--rw- \Device\HarddiskVolume1\WINDOWS\system32\drivers\etc\hosts
```

`dumpfiles` でファイルの内容を取得します。

```bash
$ vol.py -f forensic_100.raw dumpfiles -Q 0x000000000217b748 --name -D ./
Volatility Foundation Volatility Framework 2.5
DataSectionObject 0x0217b748   None   \Device\HarddiskVolume1\WINDOWS\system32\drivers\etc\hosts
```

カレントディレクトリに生成されたファイルを確認します。

```bash
$ cat file.None.0x819a3008.hosts.dat
# Copyright (c) 1993-1999 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

127.0.0.1       localhost
153.127.200.178    crattack.tistory.com
```

## 再度Webサイトにアクセス
IE履歴から取得したURLにhostsのIPアドレスを当てはめると、
`http://crattack.tistory.com/entry/Data-Science-import-pandas-as-pd` のURLで、
`http://153.127.200.178/entry/Data-Science-import-pandas-as-pd` にアクセスしたことになります。

後者のURLを開いたところ、40バイトのファイルが得られました。

```:Data-Science-import-pandas-as-pd
    SECCON{_h3110_w3_h4ve_fun_w4rg4m3_}
```

無事、flagを獲得することができました。

## 種明かし(?)
後から気が付いたのですが、ホスト名をDNSで名前解決した場合は異なるIPアドレスが返ってくるようです。
ホスト名とIP直打ちでは、それぞれ異なるサーバに接続されていたのですね。

```:nslookupの応答
>nslookup crattack.tistory.com

権限のない回答:
名前:    crattack.tistory.com
Addresses:  175.126.170.70
          175.126.170.110
```

```:hostsの記載
153.127.200.178    crattack.tistory.com
```