Log

Penetration Test~Intelligence Gathering~

1.はじめに

今日はペネトレーションテストのインテリジェンスギャザリングについてまとめて意向と思います。そもそもインテリジェンスギャザリングとは、ターゲットとなるサーバー等を調査する作業になります。

 

2.色々なインテリジェンスギャザリング

基本的なインテリジェンスギャザリングについてまとめてみました。

 -whois 

f:id:yottiii:20180429101401p:plain

whoisドメインの情報などをまとめて表示してくれるコマンドです。

 

-Netcraft

これはウェブサイトのDNSサーバー等を探すことができるものです。

サイトURLは

Netcraft | Internet Research, Anti-Phishing and PCI Security Servicesです。

 

 

nmap

これは非常にインテリジェンスギャザリングでよく使われるcmdです。

ためしに自分のipをスキャンしてみましょう!

f:id:yottiii:20180429102103p:plain

このように開いてるポートを表示してくれます。

ここでオプションの説明をします。

-sSはTCPステルススキャンと呼ばれ、tcpポートが開いているかどうかチェックしてくれます。

-Pnは接続確認にpingを使わない方法です。

ここで-Aというオプションを追加してみます。

f:id:yottiii:20180429102742p:plain

このように詳細が確認できます。

たとえばSQLサーバーを立てていた場合、どのソフトを使ってSQLサーバーを立てているかなどが詳細としてわかります。

 

 

高度なtpcスキャニング

-TPCアイドルスキャン

f:id:yottiii:20180429110329j:plain

アイドルスキャンは別のホストをスプーフィングしてターゲットにスキャンを仕掛ける。この方法により、ステルススキャンを可能にする。

ここでnmapを使うときに-sIオプションを指定する

nmap -Pn -sI OtherHostIP targetIP

でステルススキャンを行える。

 

 

マルウェア解析入門1〜概要とか〜

f:id:yottiii:20180427172014p:plain

1.introduction

こんにちは!yottiです!

今回からマルウェアの解析入門ということでマルェア解析の基礎を勉強がてら行っていこうと思います!

おそらく不定期ですが.....

ソースコード

github.com

こちらのgithubに公開していきまーす。

 

2.Background

 みなさんもこの記事を読んでいるということは、少なくともセキュリティに興味があるということだと思います。またセキュリティに興味がある人は、外国の映画などに影響され、いわゆるハッカーと呼ばれる人たちが、何を打ってるかわからないPC画面上の前でカタカタとコードを書いて、企業のサーバや、個人の情報を抜き取ったりするというのに憧れてセキュリティの世界に足を踏み入れた人も少なくないはずです。

 ですがそのような夢を見ている人は即刻この分野には合わないかもしれません。実際は大量のアセンブリ言語を読まなくてはならなかったり、地味な作業をひたすらやり続ける、その苦痛に耐えられなくなり、途中で辞める人も多いです。

 ここでそのようなことにならないためにも初心者向けにマルウェア解析の概要と実際のマルウェアの解析方法をわかりやすく知ってもらいたいと思い作成しました。

 

3.What is malware analysis?

 マルウェア解析とは、いわゆる不正な動きをするプログラムを調査しその挙動や目的などを明らかにすることです。以下のようなことが挙げられます。

 ・感染拡大を防ぐ

 ・感染動作を見極める

例えばあるマルウェアがあったとして、どのように感染するのかわかりません。自分で知らない間に、他の人にマルウェアをばらまいている可能性もあるわけです。またマルウェアに感染したことで、自分にとってどのような不利益があるのか?情報を抜き取られているのか?バックドアにされているのか?などを知る必要があります。

 

ここでマルウェア解析においていくつかポイントを意識しながら解析をするめる必要があります。以下にまとめると・・・・

 ・感染手段に注目

 ・バックドアのありなし

 ・感染端末

 ・目的に注目

が挙げられます。これらを意識しながら解析する必要があるわけです。

例えばバックドアがあれば、コード上にbind,listen,acceptなどといったバックドア特有の文字列が含まれているでしょう。

 

3.Process of Malware Analysis

マルウェアの解析には2種類あります。

動的解析(DinamicAnalysis)と静的解析(StaticAnalysis)。ではStaticAnalysisとDinamicAnalysisは何が違うのでしょうか?

まずStaticAnalysis後々説明するデバッカと呼ばれるものを使用してコードレベルでマルウェアを解析します。ただ重要な動作を見逃す可能性も高いです。

DinamicAnalysisというのは実際にマルウェアを仮想環境などに実際に感染させ、その動作や感染経路を記録します。実際に感染させるので使用しているPCがマルウェアに感染してしまうリスクも増えます。

 

双方メリットデメリットがあります。

ですので基本的に動的解析、静的解析のどちらも行うのケースが多いです。

それからマルウェアはパックと呼ばれる、静的解析を防ぐために暗号化や圧縮されているケースがあります。静的解析を行う場合はのパッカーを解凍してから行わなくてはいけません。これをアンパッカーと言います。

これらの動作を経てマルウェアの解析を行います。

 

4.Malware Types

今やマルウェアは世界に数百億もあると言われていますが。ある種類の亜種(派生)、があり実際は数種類〜数十種類のマルウェアが元となっています。そこで代表的なマルウェアのTypeをここで説明します。

・Backdoor・・・攻撃者がコンピュータにあなたの端末にアクセスするためにインストールされるマルウェアバックドアは通常、攻撃者とコンピュータをコネクトしており、認証なしでアプリケーションを動かしたりコマンドラインを操作したりする。

 

・Botnet・・・バックドアに似ているが、コネクトしているのはC&Cサーバと呼ばれるサーバで、そのサーバには他にも感染したPCがつながっている。攻撃者がC&Cサーバに指示を出すと一斉に感染しているPCがその動作をする。その感染しているネットワークをBotNetと呼んでおり、最近ではIoT機器に感染するしDDOSattackを仕掛けるマルウェアが流行している。(mirai)

 

・Downloader・・・downlodaderは通常、初めてシステムにアクセスするときにインストールされる。このマルウェアに感染すると攻撃者の意思で、他のマルウェアをインストールしたりする。

 

・Inrformation-stealing malware・・・このマルウェアは情報をぬきとる。感染したPCは、オンラインバンキングのパスワードやlogなどを収集され、その情報を攻撃者へ送信される。

 

・Launcher・・・正規のランチャーに悪意のあるランチャーが偽造する。そしてあたかも正規のランチャーのように振る舞い、知らぬ間に悪意のあるマルェアなどをインストトールしたりする。

 

Rootkit・・・個人的にexploittoolを作ったりするものだと思ってましたが、practical malware analysisには"" Malware code designed to conceal the existence of other code""と書かれているので他のマルェアを隠すためのkitですね。基本的に単体では動作せず、他のマルェアとペアになります。

 

・Scareware・・・これはマルウエアに感染していなくても、あたかもそのデバイスが感染しているかのように振る舞うマルウェアです。そのマルウェアは、このソフトを入れるとマルウェアをremoveできますと言いますが、実際はそんなことはありません。だってマルウェアには感染していないのですから。。。はい

 

Spam-sending maiware・・・このマルウェアに感染すると、他のユーザーにスパムメールを送る。そこからまた感染した人が他の人にメールを送るという。

 

・Worm or Virus・・・Malicious code that can copy itself and infect additional computers.

 

4.Getting for malware 

 マルウェアを解析したい!!!と思っても解析するマルウェアの検体がなくては話になりません。そこでここではいくつかマルウェアの検体を入手できるサイトを紹介します。

 ・VX heavens

 ・Offensive Computing

    ・Shadowsever

 

5.Bibliography

[1]Michael Sikorski and Andrew Honig, "Pratical Malware Analysis~The hands-on to            Dissecting Malicious Software",2012

[2]Arai etc,"Analysing Malware",2010

 

正規表現の勉強! その1

■1.はじめに

セキュリティキャンプ全国大会に参加にあたり

正規表現を用いたパターンマッチングエンジンの高速化をするので、その勉強もかねて正規表現に関しての記事を書いていきます。

 正規表現に触れるのは初なのでミス等あるかもですが、ご了承ください^^;

f:id:yottiii:20170720231501j:plain

■2.正規表現とは??

正規表現とは式です。

プログラマにとっての式は||(or)や&&(and),!(not)などの論理式を使って

プログラムを作成しています。式は演算子や数の組み合わせで構成されています。

正規表現は文字列のパターンで表現が可能である。

あ|い|う|え|お

という正規表現あ~おまでの1文字でというパターンで表現されている。

記号|(or)という複数の可能性を表す表現の演算子である。

 例えば

私は p(erl | ython | hp)が好きです。

といえば perl,python,phpのどれかが好きということを表現している。

この場合、c++はマッチしない。

 

 

■3.基本メタ文字

またメタ文字について少し触れておきます。

メタ文字とは正規表現において、特別な意味を持った文字のことです。

また、特別な意味を持たないものをリテラルと呼びます。

簡単に言うと、正規表現はこのメタ文字とリテラルで構成されています。

 基礎的なメタ文字について以下に示しておきます。

名称 演算子
選択
量指定子 * + ? {}
グループ化 () (?:)
先読み等 (?=) (?!)(?<=)(?<!)

 これらのメタ文字に関してはのちのち説明します。

 

■4. 初歩的な正規表現プログラムを書いてみる

ではさっそくこれらを用いてパターンマッチングエンジンのプログラムを書いていきます。今回はpythonを使って書きたいと思います。python正規表現のライブラリはreモジュールという名前で出てます。

f:id:yottiii:20170720231413j:plain

import re

test1="foo "
test2="foo bar"
test3="test foo bar"
regexp=re.compile(r"[fb]oo")

for str in(test1, test2,test3):
print u"[%sのマッチ結果]"% test1
if regexp.match(str):print u"matchでマッチ"
if regexp.search(str):print u"searchでマッチ"



//実行結果
[fooのマッチ結果]
matchでマッチ
searchでマッチ
[fooのマッチ結果]
matchでマッチ
searchでマッチ
[fooのマッチ結果]
serchでマッチ
//

 pythonの正規表現オブジェクトにはmatch()とsearch()という2種類のマッチングメソッドがある。

match()は部分文字列によるマッチの判定、

search()は前方一致によるマッチしているの上記の結果から言える。

 

またpythonのreモジュール以外に、dfaregという前文一致が出来る、モジュールがあるので使ってみる。

import dfareg

regexp = dfareg.compile(r"(p(erl | ython | php ) | ruby)")
if regexp.matches("python"): print u"pythonがマッチ"
if regexp.matches("ruby"): print u"rubyがマッチ"
if regexp.matches("c"): print u"cがマッチ"

 dfareg.compileを呼ぶと、コンパイルされた正規表現が返ってきます。この正規表現に対して、matchesメソッドによって、文字列がマッチするかしないかを判別できます。

 

■5.NFAとDFAについて

NFAとDFAについての説明の前に、有限オートマンについての説明をします。有限オートマンとは、文字を入力すると真偽値を出力するものです。

有限の状態を持っており、入力ごとにその状態を変化させます。最後の入力で、出力が決定されます。

有限オートマンにはNFAやDFAがあり、それを示すには状態遷移図を利用します。円は状態を示し、矢印は文字の入力により変化を示します。

εは空文字('')を表します空文字とはその名の通り空っぽの文字であり、他の文字列と繋げても文字列を変化させません。例えば、'a'+''+'c'は'ac'となります。

詳しい説明はまたしたいと思います。

 

NFAとDFAの違いに関して簡単に説明します。

NFAは入力により状態が一意には決まりません。またε(または '') での状態遷移を許可します。例えば "abc" と言う文字列は、 'a'、'b'、'c' と入力してもいいし、''、''、'a'、''、''、''、'b'、''、''、'c' 等にしても大丈夫です。

 

対する DFA は入力により遷移する先の状態は一つになることが保障されています。

先ほどのNFAのεも許可されていません。

 

NFAエンジンとDFAエンジン

みなさんはバックトラックという方式をご存知ですか?

私はグラフ理論系の研究室なので、嫌というほどやっています(笑)

深さ優先探索とも呼ばれます。深さ優先探索アルゴリズムに関しては、わかりやすいものがネットにあったのでこちらを参照してください。

http://www.hongo.wide.ad.jp/~jo2lxq/dm/lecture/07.pdf#search=%27%E6%B7%B1%E3%81%95%E5%84%AA%E5%85%88%E6%8E%A2%E7%B4%A2+%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%27

NFAエンジンはこの深さ優先探索というアルゴリズムを使用しています。

簡単にいうと、選択肢を適当に選んで失敗するまで進み、失敗したら戻り、別の選択肢をやるというアルゴリズムです。

一方DFAエンジンは幅優先探索というアルゴリズムを使っており、これは全ての可能性をマッチするまで広げていくというアルゴリズムです。

 

■6.最後に

今後としては、セキュリティキャンプまでにDFAとNFAをPythonで実装まで行いたいです。まずはDFAエンジンの作成を行いたいです。

またこの勉強をした上で、参考にした資料等を以下に示します。

正規表現技術入門 最新エンジン実装と理論的背景

著者:新屋良磨、鈴木勇介、高田鎌

http://yara.readthedocs.io/en/v3.6.0/writingrules.html

Regular Expression Matching: the Virtual Machine Approach