ごちゃごちゃしたIT勉強記録

自分用メモ。主にセキュリティで、その他色々書きたい。

30日OS自作入門-環境構築編-

先ほどの記事に続いて、環境構築に関して書いていきます。
環境については前回の記事に書いた通りですが、再掲します。

環境

macOS Sierra ver 10.12.6(ホストOS)
VMWare Fusion(仮想環境)
Lubuntu16.04 x64(ゲストOS)

Lubuntuにしているのは好みの関係ですw
画面としてはこんな感じ。デスクトップにターミナルのシンボリックリンクを置いています。
f:id:motojiroxx:20180502012303p:plain

さて、ではここからはゲストOS上で作業を行なっていきます。
まずは、ゲストOS上で自作したOSを動かしたいので、そのためのエミュレータをインストールします。
エミュレータqemuを使います。アセンブラについてはnasmを使っていこうと思います。

qemuインストール
sudo apt-get install qemu
nasmインストール
sudo apt-get install nasm

ここまで終わった時点で、試しにこの本の1日目で使用するhelloos.imgファイルを起動してみたいと思います。

起動コマンド
qemu-system-i386 helloos.img

そうすると、こんな感じで画面が出てきます。
f:id:motojiroxx:20180502020121p:plain

ひとまず起動は完了と。
あとは、本を読んでいきながら少しずつ進めていきたいと思います。

30日OS自作入門-OS自作はじめました編-

本日から、以前から興味があったOS自作をやってみたいと思います。
もともと興味はあったのですが、仕事上優先して勉強しなければいけないことが多かったので、なかなか今まで時間を作れなかったのですが、ようやく時間が空いたので少しずつやっていこうと思います。

モチベーション

仕事としてデジタルフォレンジックマルウェア解析をやっているとしているのですが、フォレンジックは基本OSなどの仕組みからでたアウトプット(ファイル)を元に調査をします。けど、やっぱり「OSの仕組みに詳しくなった方が絶対今後いいよなぁー」という思いと、あとは単純に仕組みを勉強する方が楽しいからw
(あとは、私自身文系の学部出身で、ちゃんとしたテキストを元にOSの仕組みを勉強したことがないので、けっこう知識が散発的というかなんというか。。。)

目標

まずは一通りの仕組みと実装を、ちゃんと自分でコーディングしながら理解する


今回参考にするのは、みなさんおなじみ「30日でできる!OS自作入門」です。
やるのであればまずはこの本!という風にセキュリティ仲間にも言われたので。
30日でできる! OS自作入門 | マイナビブックス


という風にやっていきたいと思います。

環境は以下のとおり(VMのゲスト上で実施します)
macOS Sierra ver 10.12.6(ホストOS)
VMWare Fusion(仮想環境)
Lubuntu16.04(ゲストOS)

Linux環境でやる際には、以下のようなブログがありましたので、この方の情報を参考にやっていきたいと思います。

tsurugidake.hatenablog.jp

ログ分析で使うLinux関連コマンドについて

現在ハニーポットを運用してログをみたりして色々調べたりしております。
んで、なるべくKibanaのWebコンソールに頼らずにログファイルをみているのですが、やっぱりかなりみにくいですね。
JSONだと、まぁ見やすいといえば見やすいですが。。。

というわけで、あまり業務としてもやっていないログ分析を行う上でのログ整形技術を身につけるべく、Linuxのコマンド(おもにawk)との戦闘を開始しました。

ログ分析で主に使用するコマンドとオプション

まずは、ログ分析で活用されるコマンドをまとめてみようと思います。

  • awk(テキスト処理に強いプログラミング言語、ではあるがまぁシェル芸人御用達コマンドですね)
  • sed, tr(文字列置換)
  • grep(文字列探索)
  • sort, uniq(出力の整形)
  • jq(女子クォー生コマンド by USP友の会)


基本的に、bashなどのシェルで使われるコマンドとawkがあればたいていのことはできると思います。
ただ、他のコマンドを使ってやるとその方が加工が早くなるなどのメリットがあるので、使い分けは必要かと。
また、jqはJSONファイルを対象としているコマンドとなります。デフォルトでは入っていないので別途インストールが必要になります。

とまぁ、こんな感じですが、私自身もコマンドを使いこなせているかと言われれば全くと胸を張って言えてしまうため、まずはawkの基本を覚えようかと。

awkの基本

一番今後使っていくであろうコマンドについて。
まずはコマンドの基本形をちゃんと覚えておきましょう。

awk 'pattern {action} pattern {action} ......'
  • patternだけあってもいいし、actionだけあってもいい
  • デフォルトの区切り文字は空白


例として、カンマで区切られた項目のうち1番目の項目をランキングする
<コマンド>

awk -F, '{print $1}' | sort | uniq -c | sort -nr

上のコマンドについて説明をば。

  • -Fで「この区切り文字で各行の値を分割する」という意味。今回はカンマを指定
  • '{print $1}'で画面出力を行う。$Xで分割した値のうち何番目を表示するかを選択。今回は1番目
  • | sort | uniq -c | sort -nrで重複排除、同じ値をカウント、カウント数による降順ランキングを生成

特に"|sort | uniq -c | sort -nr"の一連のコマンドについてはログ分析では非常に使う機会が多いと思うので、覚えておいて損はないと思う。

で、このコマンドはログ分析における基本中の基本コマンドになると思われるのでは、と。あとは、表示したい項目をもう少し綺麗に整形したりするためにもう少しコマンドやオプションを使っていくというようになる。

で、こんな感じのログ分析に使えるコマンド関連については以下の書籍を参考にしました。


シェルプログラミング実用テクニック
https://www.amazon.co.jp/%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AE%9F%E7%94%A8%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-%E4%B8%8A%E7%94%B0%E9%9A%86%E4%B8%80-ebook/dp/B00XKU53U4


awk実践入門
https://www.amazon.co.jp/AWK%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-%E4%B8%AD%E5%B3%B6%E9%9B%85%E5%BC%98-ebook/dp/B00YA3VS2C/ref=pd_sim_351_2?_encoding=UTF8&psc=1&refRID=7B28BMQKAWSD8T1S804S


そして、一番勉強になるのはシェル芸勉強会の資料です。
ぶっちゃけ上の本読むより、シェル芸勉強会の資料とtwitterの投稿を見た方が勉強になります。
変態的なコマンドもありますが、「こんな風に書くこともできるんだー!」と感動します。
昨日も勉強会があり、その資料が初心者向けであったので、ぜひこれは読むべきかと。。

www.slideshare.net



ぶっちゃけアセンブリ見ている方が私にとっては精神衛生上いいようですw

VirusTotal APIを使ってみた

皆さんご存知VirusTotalAPIを少し試してみようと思います。

他の方のブログを見ていると、ハニーポットVirusTotalを連携させてDionaeaに保全されたマルウェアを自動的に判定するようなものを作ったりしているのをみて、非常にそそられました。

なので、まずは「そもそもVirusTotal APIってなんぞ?」というところからはじめて、簡単な使い方などをまとめておこうと思います。

VirusTotalとは

まずは基本的な話として、VirusTotalとは何かという話からはじめます。

簡単にまとめるとこんな感ですね。

  • ファイルをアップロードしたり、URLやファイルのハッシュ値をサーバーに問い合わせることによって、それがマルウェアなのか判定してくれたり、URLであれば攻撃サーバ(Command and Control Server: C2, C&C)なのかを判定してくれるWebサービス
  • 有料会員になると、アップロードされたファイルを取得することも可能
  • APIを使って、他のアプリケーションとの連携を行うことができる
  • Desktopアプリケーションもあるらしい

フォレンジックとかでもよくありますが、マルウェアに感染した端末の調査をする際に、ディスクに残っているマルウェアをアップロードして、そのようなマルウェアなのかを判定してもらい、そこから調査すべきポイントを洗い出すということをやります。

動的解析を行える環境があれば、そちらで監視ツール(WireShark, Process Monitor, ProcessHackerなどのツール、もしくはCuckooなどのサンドボックス)を使ってログを取りそこから調査すべき部分を洗い出したりします。


ただ、調査の際には時間が限られているので、時間短縮の為にもまずはマルウェアと思しきファイルのハッシュ値を取り、それをVirusTotalにぶん投げるという感じですね。

で、調査の際には検体をそのままアップロードをすることはしません。というのも、もし検体内にセンシティブなデータがそのまま入っている場合(特に高度標的型攻撃になると、ターゲットとなっている企業の情報が入ってしまっている)があります。かつ、有料会員であればそれをダウンロードできてしまうので、「どこが攻撃を受けてしまったのかわかってしまう可能性」があります。なので、まずは「すでに同じ検体が解析されているか、またどのような結果が出ているか」を調べる為にハッシュ値を算出しVirusTotalに投げる、という流れになります。

個人利用ではそこまで気をつける必要はないかもしれませんが、企業の方で利用している場合には注意が必要です。

VirusTotal APIとは

今回の本題、VirusTotal APIです。

  • VirusTotal上の情報を、ブラウザを使わずにスクリプトでアクセスできるようにするためのAPI
  • json形式のレスポンスデータを取得することができる
  • 制限が色々とある(1分あたり4回のリクエストしかできないなど)

Web系の知識は乏しいのであれですが、これはいわゆるRESTful APIということなのでしょうか?
まぁそんなことはいいとして、公式サイトにある説明では、以下の項目ができるとあります。

  • Sending and scanning files
  • Rescanning already submitted files
  • Retrieving file scan reports
  • Retrieving URL scan reports
  • Retrieving domain reports


それぞれどのURLにリクエストを投げるか決まっていて、ちゃんとうまくいけばレスポンスとしてjsonデータが手に入ります。


というわけで、実際にローカル端末からPythonスクリプトVirusTotalにリクエストをしてみましょう。
今回やってみたのは「Retrieving file scan reports」の項目です。

実際にやってみた

やってみた際の環境は以下の通りです。

というわけで、ハッシュ値を投げて検索結果をもらうスクリプトは以下の通りです。
試しに検索対象のマルウェアはWannacryを選んでみました。

# -*- coding:utf-8 -*-

import json
import urllib
import urllib2

# malware hash value that is sent to VT
hash = '2f76b88b420003516f90062940ef7881'

# file scan reportを取得する際に指定するURL
url = "https://www.virustotal.com/vtapi/v2/file/report"

params = {'apikey': '自分のpublic api key',
          'resource': hash}

data = urllib.urlencode(params)
request = urllib2.Request(url, data)
response = urllib2.urlopen(request)
json_response = response.read()

print json_response


上記のPythonスクリプトを実行した結果得られた結果は以下の通り

{
    "scans": {
        "Bkav": {
            "detected": false,
            "version": "1.3.0.9466",
            "result": null,
            "update": "20180310"
        },
        "MicroWorld-eScan": {
            "detected": true,
            "version": "14.0.297.0",
            "result": "Trojan.GenericKD.12015782",
            "update": "20180310"
        },
        "nProtect": {
            "detected": true,
            "version": "2018-03-10.02",
            "result": "Ransom/W32.WannaCry.5267459",
            "update": "20180310"
        },
        ...............
},
    "scan_id": "1c4a7589d26c97c38d4f826242b6740b35441e43ddd7394d399dbf94ab868483-1520716198",
    "sha1": "08b943a7b7f4d368ed0c66afa4c98087be5efd4b",
    "resource": "2f76b88b420003516f90062940ef7881",
    "response_code": 1,
    "scan_date": "2018-03-10 21:09:58",
    "permalink": "https://www.virustotal.com/file/1c4a7589d26c97c38d4f826242b6740b35441e43ddd7394d399dbf94ab868483/analysis/1520716198/",
    "verbose_msg": "Scan finished, information embedded",
    "total": 67,
    "positives": 58,
    "sha256": "1c4a7589d26c97c38d4f826242b6740b35441e43ddd7394d399dbf94ab868483",
    "md5": "2f76b88b420003516f90062940ef7881"
}


Pythonスクリプトを作成するにあたり、以下の先生方のブログを参考(というか丸写しw)にさせていただきました。
www.morihi-soc.net
qiita.com
blog.daruyanagi.jp

今回はハッシュ値を投げるだけでしたが、ファイルを投げるスクリプトも書いて試そうかと思います。
というわけで、今回はここまで。







<ちょっとだけ気になったもの>
VirusTotal API Documentationの説明の中で特に個人的に面白いものはこちら。

The API must not be used in commercial products or services, it can not be used as a substitute for antivirus products and it can not be integrated in any project that may harm the antivirus industry directly or indirectly. Noncompliance of these terms will result in immediate permanent ban of the infractor individual or organization.

どの会社に向けたものでしょうね〜w

おそらくセキュリティ界隈でお仕事をされている方であればわかるかと。

ハニーポットについて

現在ハニーポットを運用していますが、ある程度どのハニーポットがどのような情報の収集に適しているのかをまとめておこうと思います。

有名どころをいくつか以下にまとめておきます。

 

ハニーポットについて

  1. Dionaea
  2. Cowrie
  3. Glastopf
  4. honeytrap
  5. Conpot

まだまだ知識が乏しいので、現状こんな感じでしかまとめられていませんが、今後もう少し知識を増やして色々かけるようにしようと思います

また、現在運用しているT-PotはStandardの設定でインストールしたため、Conpotはインストールされていません。

なので、今年中にはConpotでの産業システムに対する攻撃観測などをおこなってみたいと考えています

今回はここまでということで。

ハニーポットはじめました。

最近流行りのハニーポットを構築して、攻撃観測をはじめました。

モチベーションと目標は以下の通り

 

モチベーション

  • 最新の攻撃動向を、サイトなどから調べること以外に自分で観測をして、動向などを自分で推測できるようになりたい
  • 業務としてマルウェア解析をやっているが、サイトに置いてあるものはだいたい古いので、やっぱり新鮮なマルウェアをとっ捕まえて解析したい
  • サーバー設定を変えることで、観測される攻撃はどのように変わるかや、適切な設定について(主にファイアウォールなど)を勉強したい

目標

  •  まずはちゃんとハニーポットの管理をできるようにする(継続的に)

  • ログ分析を行うために必要な知識を身につけ、注目すべき部分を自分で判断し、攻撃を推測できるようにする。
  • ツールの操作(Kibanaなど)を把握する
  • 可能な限り機能拡張を行う

といった感じです。

 

では早速、現在運用しているハニーポット「T-Pot」の紹介をば。

 

T-Pot

T-Potはドイツテレコムが作成したハニーポットプラットフォームです。

複数のハニーポットやツールをdocker上で動かし、攻撃観測を行います。

T-Potに含まれているツールは以下の通りです。

ハニーポット
  • Cowrie
  • Dionaea
  • Glastopf
  • Conpot
  • honeytrap
  • ElasticPot など
 

セキュリティツール

  • Suricata(IDS/IPS)
  • p0f(TCPパケットからOSのフィンガープリントを行うツール)

 

また、ELK(Elasticsearch, LogStash, Kibana)スタックを使ってログ収集、可視化、検索を行うことが可能です。

収集されたログや攻撃者によって配置されたマルウェアなどは、docker volumeというところに格納されるらしいです(あまりdockerについては知識がないので、これから勉強しようと思います。

保存期間は約30日とのこと。なので、保存期間が過ぎないうちにFTPクライアントなどを使用してローカルに落とすなど対処が必要になります。

 

詳しい内容については公式ページを見てください。

github.com

 

T-Pot選定理由

今回、攻撃観測にT-Potを使用する理由としては以下の通り

  • インストールが簡単
  • ELKスタックを使用した可視化、ログ検索が可能
  • 有名どころのハニーポットてんこ盛り
  • Webで検索して見ても、日本語のブログなどたくさんあって自分のものと比較しやすそう

もちろん自分で特定のハニーポットをインストールすることも考えました(最初はDionaea単体を運用する予定でした)が、「やるんだったら色々やってみたい」という欲がまさってしまいこちらを選択しました。

 

インストール対象の環境ですが、VPSをお借りしてそこでおこないました。

現在、観測20日目ぐらいを迎えております。

いい感じにログが溜まっておりますし、マルウェアも大量に置かれているためかなりワクワクしています。

 

この後は、攻撃観測を定期的に報告するのと、抽出したマルウェアの解析報告を行いたいと思います。

かなり放置していました。。。

色々仕事で疲れていて記事を書く気力が湧かなかったのですが、環境が変わってだいぶ調子がいいので、これからちゃんと記事を書いていこうと思います。

 

仕事ではフォレンジックマルウェア解析をやっているのですが、最近流行りのハニーポットの運用をはじめました。

なので、基本的にはフォレンジックマルウェア解析の話をしようと思いますが、定期的にハニーポットの観測結果を公表しようと思います。

 

というわけで、頑張っていこうと思います。