セキュリティコンテストにチャレンジしよう! - hitachi...2020/07/10 ·...
TRANSCRIPT
© Hitachi, Ltd. 2020. All rights reserved.
セキュリティコンテストにチャレンジしよう!
~問題解説~
© Hitachi, Ltd. 2020. All rights reserved.
問1. 【Crypto】鍵=1 (1/2)
1
【問題文】
あなたの部下であるユリウス・カエサルは、取引先に添付付きメールを送信しました。
そのメールを確認したところ、一見、自然な文章の中に、つぎの文字列が紛れ込んでいることを発見しました。
ITDUG{Dbftbs djqifs jt b gbnpvt djqifs uibu bqqfbsfe jo uif 1tu dfouvsz CD.}
あなたは、かねてから、カエサルが不正に情報流出を起こしているのではないかと
疑っています。この文字列にはどのような意味が隠されているのでしょうか。
本問題のポイント
• 暗号化された文字列を復号しましょう• 問題タイトルの「鍵=1」に復号のヒントが隠されています
© Hitachi, Ltd. 2020. All rights reserved.
問1. 【Crypto】鍵=1 (2/2)
2
【解答】
HSCTF{Caesar cipher is a famous cipher that appeared in the 1st century BC.}
解説
問題の文字列はシーザー暗号によって暗号化された文章です。
【シーザー暗号】アルファベットを決まった文字数だけシフトする暗号方式で、紀元前1世紀に古代ローマの軍事的指導者ユリウス・カエサルが使用していた。シフトする文字数を鍵と呼ぶ。例えば鍵が”3”の場合、暗号化する際は3文字後のアルファベットに置き換える。(慣例として、アルファベット以外はシフトしない)
問題のタイトルからシフトする文字数(鍵)は”1”だと分かります。よって、文字列の各アルファベットを1文字前のアルファベットに置き換えると復号できます。
A B C D E F G H I J K L M N O P Q R …
A B C D E F G H I J K L M N O P Q R …
3文字後ろにシフト
© Hitachi, Ltd. 2020. All rights reserved.
問2. 【Binary】絶対に通らないif文 (1/4)
3
【問題文】
社内ネットワークが新型のランサムウェアに感染しました。最初にバックアップデータがやられ、被害は今も拡大中です。経営陣は暗号化されてしまったデータを復号するために、ビットコインによる多額の支払いを視野に入れ始めました。
その頃、社内から数名の技術者が集まり、ランサムウェア解析ユニットが結成されました。
プログラム担当として、あなたもそのユニットの一員です。ユニットのセキュリティ担当のやまもとくんは、新型ランサムウェアを解析し、ランサムウェア自体にデータの復号キーが保持されていることを突き止め、復号キーを表示する関数まで特定することができました。しかし、どうにも、その関数の呼び出し元が、絶対に通らないif文の中にあると言って一人で騒いでいます。徹夜の疲労が皆ピークに達しています。ついに、やまもとくんはさじを投げて、寝てしまいました。他の者も意識がはっきりしていません。あとは、あなたに託されました。経営陣が身代金の支払いに応じるまでに、猶予はわずかです。あなたは復号キーを表示させることができるでしょうか。
【引き継ぎ事項】
復号キーを表示する関数:show_flag()
復号キーを表示するプログラム:bad_program.exe
プログラムのデコンパイル結果を手で整形したもの:main.cpp
やまもとくんが残したメモ:bad_program.exe.txt
© Hitachi, Ltd. 2020. All rights reserved.
問2. 【Binary】絶対に通らないif文 (2/4)
4
解説
プログラムのバイナリデータの一部をバイナリエディターで改変して、本来通らないルートに導くことで復号キーを表示する関数show_flag()を呼び出す問題です。
main.cppからshow_flag()の呼び出し条件を確認すると、「1 == 2」(1と2が等しいこと)となっており、絶対に満たすことができない条件となっています。
【 main.cpp(※)一部抜粋 】int main(int argc, char **argv){
if (1 == 2){
show_flag();}return 0;
}この条件では
関数が呼び出せないプログラムを実行しても
何も実行されない
main.cpp(※)一部抜粋
© Hitachi, Ltd. 2020. All rights reserved.
問2. 【Binary】絶対に通らないif文 (3/4)
5
バイナリエディターを用いて、show_flag()を呼び出せる条件に変更します。
【案1】比較する数値を同じ値に変更する(「1 == 2」 → 「1 == 1」)【案2】数値の比較条件を変更する(「1 == 2」 → 「1 != 2」(1と2が異なる))
ポイントはbad_program.exe.txtに書かれている逆アセンブルコードから、どの値を書き換えれば良いかを読み取れるかどうかです。
【案1】でチェックする値
bad_program.exe.txt(※)一部抜粋
【案2】でチェックする値
© Hitachi, Ltd. 2020. All rights reserved.
問2. 【Binary】絶対に通らないif文 (4/4)
6
【解答】
HSCTF{if_statement_not_executed}
bad_program.exe.txtで確認した値をもとに、バイナリエディターを使用して、プログラムのバイナリデータ(関数の呼び出し条件部分)を改変します。
【案1】
【案2】
比較する数値を変更(”2”を”1”に変更)
比較条件を変更(jneをjeに変更)
開発して出荷するプログラムも、攻撃者にリバースエンジニアリングされるリスクは常に考えておかないといけませんね。
© Hitachi, Ltd. 2020. All rights reserved.
問3. 【Misc】セキュリティクロスワード (1/2)
7
【問題文】
クロスワードを解いて、フラグ HSCTF{①②③④⑤⑥⑦⑧⑨⑩⑪} を完成させましょう。
【関連ファイル】
securitycrossword.xlsx
本問題のポイント
• セキュリティに関するクロスワードに挑戦し、フラグを完成させましょう
© Hitachi, Ltd. 2020. All rights reserved.
問3. 【Misc】セキュリティクロスワード (2/2)
8
解説
【解答】HSCTF{MAGUROSUSHI}
© Hitachi, Ltd. 2020. All rights reserved.
問4. 【Misc】脆弱なパスワード付zip (1/2)
9
【問題文】
さとうくんは、お客さまに超機密ファイルをメールで送信しました。上司である”あなた”も同メールをCCで受信しています。
ファイルはパスワード付きzipファイルで、メール本文に、「パスワードはいつもの数字8桁です」と表記されています。
あなたはパスワードを知りませんが、パスワードの設定が甘いと感じたので、さとうくんに今後はパスワードを変更するよう指示したところ、「今のままでも、10の8乗通りもパターンがあるから安全ですよ」という屁理屈な答えが返ってきました。
あなたは、さとうくんを納得させるために、颯爽とカッコよく目の前でzipファイルを解凍してみせることにしました。あなたは解凍することができるでしょうか?
【関連ファイル】
flag.zip
本問題のポイント
• パスワード付きzipファイルに平易なパスワード(数字8桁)が設定されています• 平易なパスワードは総当たりで解析することができます
© Hitachi, Ltd. 2020. All rights reserved.
問4. 【Misc】脆弱なパスワード付zip (2/2)
10
【解答】
HSCTF{analyzable_password}
解説
平易なパスワードは、パスワード解析機能をもつzip解凍ソフトウェア(Lhaplusなど)を用いて、総当たり(考えられるすべてのパターンを試す方法)すれば解析可能です。解析した結果、パスワードが「20200724」だとわかりますので、そのパスワードを用いてzipファイルを解凍すると、フラグが書かれたテキストファイル(flag.txt)を取得できます。
簡易なパスワードは、現在でも利用されているようなケースがありますので、大小英字、数字、記号を含む最低8桁以上のパスワードの設定を心がけましょう。
出典:総務省:コンピュータウイルス・不正アクセスの届出状況[2008年9月分および第3四半期]についてhttps://www.ipa.go.jp/security/txt/2008/10outline.html
© Hitachi, Ltd. 2020. All rights reserved.
問5. 【Misc】隠されたデータを探せ (1/3)
11
【問題文】すずきくんは上司であるあなたに、Excelの報告書を提出しました。正式な報告内容を”Sheet1”に、報告書の中間生成データを”Sheet3”に記述しています。すずきくんは、”Sheet3”の内容は報告に不要なので、シートを非表示にしたうえで、シート操作をできないよう”ブックの保護”(複雑なパスワードで)をかけて提出しました。
あなたは、「これじゃあ、”Sheet3”が見られちゃうよ。お客さまへ資料を提出する際は気をつけるように。」と注意しました。”Secret-sheet.xlsx”から、すずきくんが隠したつもりの”Sheet3”を見つけてください。
【関連ファイル】
Secret-sheet.xlsx
本問題のポイント• 複雑なパスワードなため、パスワードを
解析して表示させることは困難です• パスワード解析以外でSheet3を表示
する方法がないか探してみましょう
“Sheet1“だけで、“Sheet3“は表示されていない
© Hitachi, Ltd. 2020. All rights reserved.
問5. 【Misc】隠されたデータを探せ (2/3)
12
解説
Excel(xlsx)ファイルはXML記述の複数ファイルがzip形式で圧縮されたものです。Office Open XMLフォーマットと呼ばれています。そのため、“Secret-sheet.xlsx”の拡張子を.zipに変更して解凍すると、Excelデータの中身(Excelデータを構成するファイル群)を確認できます。解凍したデータの中から、シート構成を管理するファイル“workbook.xml”を見つけ、テキストエディターで開きます。
Xmlファイル内のSheet1とSheet3の設定を見比べると、非表示であるSheet3にstate=“hidden”が設定されていることがわかります。本設定がSheet3の状態(非表示)を表しているため、Sheet3のstate=“hidden”を削除します。
選択箇所(△state=“hidden”)を削除※△は半角スペースを表す
© Hitachi, Ltd. 2020. All rights reserved.
問5. 【Misc】隠されたデータを探せ (3/3)
13
Xmlファイルを編集後、再度zip圧縮(※)し、拡張子を.xlsxに戻します。そのExcelファイルを開くと、Sheet3が表示され、シートの内容(フラグ)を確認できます。
【解答】
HSCTF{DOTMOJI}
お客さまには、内容を編集できないファイル形式(PDFファイルなど)で提供することをおすすめします。
※フォルダーごと圧縮するとうまくいかないので、フォルダーの中身を指定して圧縮します。
編集後のExcelではSheet3が表示され、シートの内容(フラグ)を確認できる
© Hitachi, Ltd. 2020. All rights reserved.
問6. 【OSINT】写真の撮影場所 (1/2)
14
【問題文】あなたがSNSに写真を投稿したところ、あなたの居場所を友達に特定されてしまいました。休暇中なので行き先を秘密にしたかったのですが・・・。友達はどのようにして、あなたの居場所を特定したのでしょうか。投稿した写真はつぎのものです。
フラグ:HSCTF{xxxx}xxxxを埋めてフラグを完成させてください。※xxxxは特定した場所の最寄駅のアルファベット表記※アルファベットは全て小文字、記号・スペースなし
【関連ファイル】photo_19.JPG
本問題のポイント• 投稿した写真に場所を特定できる情報が無いか探してみましょう• 情報から特定した場所の最寄り駅(フラグ)を確認してみましょう
© Hitachi, Ltd. 2020. All rights reserved.
問6. 【OSINT】写真の撮影場所 (2/2)
15
解説
GPS機能付きのスマートフォンなどで撮影した写真には、Exif情報とよばれる撮影条件に関する情報が追加されます。そのため、GPS機能がオンの状態で撮影すると、Exif情報に撮影場所の座標が記録されます。
地図検索サービスで投稿写真の位置を検索すると、撮影場所は鹿島臨海鉄道の「長者ヶ浜潮騒はまなす公園前」駅であることが分かります。また、特定した場所の最寄り駅のアルファベット表記は、駅名をインターネットで検索するなどで確認できます。
画像ファイルを扱う場合、不要なプライバシー情報が含まれていないか確認しましょう。
【解答】
HSCTF{chojagahamashiosaihamanasukoenmae}
投稿した写真のプロパティ情報を確認すると、撮影場所の座標情報が確認できます。(画像を選択した状態で右クリックし、プロパティの[詳細]タブから確認できます)
© Hitachi, Ltd. 2020. All rights reserved.
問7. 【OSINT】ユミコのつぶやき (1/2)
16
【問題文】あなたが保守を担当している製品に脆弱性が含まれていることがわかりました。調査を進めたところ、情報セキュリティブログのユミコ(@security_yumiko)が、2014年の6月にTwitterにつぶやいた、OpenSSLに関する脆弱性が関係していることがわかりました。
ユミコのつぶやきから、該当する脆弱性のCVE(共通脆弱性識別子)を見つけ出してください。
※フラグはHSCTF{CVE(共通脆弱性識別子)}です。
本問題のポイント
• ユミコのつぶやきから該当する脆弱性のCVE(共通脆弱性識別子)を見つけましょう• Twitterの検索機能を使用して、つぶやきを絞り込みましょう
© Hitachi, Ltd. 2020. All rights reserved.
問7. 【OSINT】ユミコのつぶやき (2/2)
17
【解答】
HSCTF{CVE-2014-0224}
解説Twitterでは単にキーワードを検索するだけではなく、様々な検索オプションが用意されています。問題文からキーワードを抽出し(例:「@security_yumiko」「2014年の6月」「OpenSSL」「CVE」)、該当するつぶやきを検索します。
例えば「from:@security_yumiko OpenSSL CVE until:2014-06-30」で検索すると、2014年6月9日の脆弱性(CVE-2014-0224)に関するつぶやきを見つけることができます。
Twitterのつぶやきは簡単に検索することができます。業務につながる情報はSNSなどにアップロードしないようにしましょう。
© Hitachi, Ltd. 2020. All rights reserved.
問8. 【Network】感染…しちゃった? (1/2)
18
【問題文】
会社が契約しているセキュリティ監視ベンダーから、「あなたの会社の一部のPCが、C&Cサーバーと通信しているようだ」と連絡が入りました。
その後、セキュリティ監視ベンダーからpcapファイルが送られてきました。
あなたは、pcapファイルを解析して、機密情報が含まれていないか、確認することになりました。
あなたは、機密情報を見つけることができるでしょうか?
※機密情報とは、”HSCTF{XXXXXXX}”(X…Xは任意)という形式の文字列を指します。この文字列がフラグです。
【関連ファイル】
ping.pcapng
本問題のポイント
• 通信内容から外部通信を行っているデータを見つけ、通信内容を調査しましょう
© Hitachi, Ltd. 2020. All rights reserved.
問8. 【Network】感染…しちゃった? (2/2)
19
解説pcapファイルをWiresharkで開き、機密情報(フラグ)を調査します。今回はWiresharkの文字列を検索する機能を使い、”HSCTF”の文字列が含まれているパケットを検索します。
するとフラグが含まれるパケットを一発で見つけることができます。
【解答】
HSCTF{PingPatt}
本問題では通信が暗号化されていないため、通信内容を簡単に確認できます。平文データでのやり取りは危険だということを、身をもって学べますね。
© Hitachi, Ltd. 2020. All rights reserved.
問9. 【Stegano】公開文書 (1/2)
20
【問題文】外部からの情報開示請求に対応して公開した情報のうち、黒塗りで非公開にしておいたフラグ情報が漏れてしまった。公開文書の作成を担当したさいとうくんは困ってしまった。「おかしい・・・言われたとおりにフラグの部分を黒塗りして、PDFの状態で公開したのに・・・」
なぜさいとうくんが作成した文書からフラグ情報が漏れてしまったのか。分かったら、フラグの内容をさいとうくんにこっそり教えてあげてほしい。なお、フラグには空白文字が含まれない。不要な空白文字は除いた状態で教えてあげてくれ。
【関連ファイル】
公開文書.pdf
本問題のポイント
• フラグ情報の隠し方に問題がないか確認してみましょう
© Hitachi, Ltd. 2020. All rights reserved.
問9. 【Stegano】公開文書 (2/2)
21
【解答】
HSCTF{You_Should_Use_KURONURI_Properly}
解説
問題の文書はフラグ情報をマーカーで塗りつぶしただけなので、実際にはフラグ情報が記載されたままになっています。フラグ部分を選択してコピーし、テキストエディターなどに貼り付けると、塗り潰されたフラグ情報が表示されます。
もし情報を隠したいのであれば、蛍光ペン機能で黒塗りにするのではなく、別の文字(「■」や「*」など)に置き換えることを推奨します。
PDFファイル
テキストエディター
この行をコピーし、テキストエディターに貼り付け
© Hitachi, Ltd. 2020. All rights reserved.
問10. 【Stegano】このWordの作成者は (1/2)
22
【問題文】やまだくんは海外出張報告書を上司に提出しました。しかし、どうやら、この報告書は他人が書いたものを盗用した疑いがあります。この報告書を書いた本当のユーザーは誰でしょうか。
【海外出張報告書】海外出張報告書.docx
※フラグは”HSCTF{(ユーザー名)}”です。
本問題のポイント
• ファイルから報告書を書いた本当のユーザーの手掛かりになる情報を探しましょう
© Hitachi, Ltd. 2020. All rights reserved.
問10. 【Stegano】このWordの作成者は (2/2)
23
【解答】
HSCTF{H3_r3a11y_v15173d_7h3r3}
解説ExcelやWordには挿入した画像などに代替テキスト(音声読み上げソフトウェアが画像などのオブジェクトの代わりに読み上げる文字を設定する)を追加することができます。この代替テキストは、画像などを挿入した際に、自動で生成されることがあります。例えば、Wordに画像ファイルをドラッグアンドドロップで挿入した場合、代替テキストには画像ファイルのファイルパス情報が自動で追加されます。
報告書に挿入されている画像の代替テキストを確認すると、以下のファイルパス情報が設定されています。
これは挿入された画像がユーザー名「HSCTF{H3_r3a11y_v15173d_7h3r3}」のPicturesフォルダー下に格納されていたことを示しています。
C:¥Users¥HSCTF{H3_r3a11y_v15173d_7h3r3}¥Pictures¥Sample Pictures¥IMG_6785.JPG
そのため、画像を挿入したユーザーが本当のユーザーだとわかります。
© Hitachi, Ltd. 2020. All rights reserved.
問11. 【Web】blindexfil (1/5)
24
【問題文】
あなたはWebサーバーの管理者です。ある日、HTTPサーバーのログを眺めていると、ふと、攻撃を受けた痕跡を見つけてしまいました。
改めて、HTTPサーバーのログを下記の観点で調査して下さい。
(観点1)攻撃が成功しているか?
(観点2)どのような攻撃が行われているか?
(観点3)攻撃者は何を行ったのか?
情報が持ち出されたのなら、どのような内容が漏えいしたか?
※フラグは調査の過程で見つかるようになっています。
【関連ファイル】
access.log.zip
本問題のポイント
• 問題文の観点に従ってHTTPサーバーのログを調査してみましょう
© Hitachi, Ltd. 2020. All rights reserved.
問11. 【Web】blindexfil (2/5)
25
解説
本問題はBlind SQL Injection攻撃に関する問題です。
【Blind SQL Injection攻撃】攻撃者がデータをWebサーバーに送信し、Webサーバーのレスポンスと動作を観察・分析し、データベース管理システムに関する情報(実行ユーザーやテーブル名など)を盗み出す攻撃手法。
攻撃者データベース
テーブル名の1文字目は「a」?
・・・
テーブル名の1文字目は「t」?
テーブル名「test_table」
偽の応答
真の応答→テーブル名の1文字目は「t」と判明
© Hitachi, Ltd. 2020. All rights reserved.
問11. 【Web】blindexfil (3/5)
26
上記のSQL文(赤文字)の場合、データベース「hsc_tf_db」のテーブル「users」でrow番号が0のレコードについて、カラム「name」の値の4文字目の文字コードが、112(pの文字コード)より大きいかを比較しています。
【access.log(抜粋)】192.168.21.133 - - [29/Aug/2018:07:39:58 +0000] "GET /login.php?name=admin' AND ORD(MID((SELECT IFNULL(CAST(name AS CHAR),0x20) FROM hsc_tf_db.users ORDER BY id LIMIT 0,1),4,1))>112 AND 'dzbh'='dzbh&password=admin HTTP/1.1" 302 468 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
ログを見ると、同じようなSQL文が並んでいることなどから、Blind SQL Injection攻撃が行われていることが分かります。
ORD(MID((SELECT IFNULL(CAST(name AS CHAR),0x20) FROM hsc_tf_db.users ORDER BY id LIMIT 0,1),4,1))>112
カラム名
比較する文字の文字コードデータベース・テーブル名 row番号 値の文字の桁数
© Hitachi, Ltd. 2020. All rights reserved.
問11. 【Web】blindexfil (4/5)
27
このように攻撃者は挿入したSQL文の真偽の結果から、データベースのカラム名や、値を読み取ります。
前ページのSQLが真になる(SQLエラーとならない)場合、4文字目が“p”より大きい文字コードの文字であることが分かります。また、SQLが偽になる(SQLエラーとなる)場合、4文字目が“p”より小さい文字コードの文字であることが分かります。比較する文字コードを変更し比較を繰り返すことで、該当する文字を判定します。
ステータスコードは、200もしくは302の2種類であり、データサイズも同じことから、このステータスコードによって、攻撃者が挿入したSQL文の真偽を判別していると予想します(本問では302が真となります)。
前ページのSQL文で、ログから確認した、比較した文字コードと、そのSQL文の真偽を右の表に示します。
この結果から、データベース「hsc_tf_db」のテーブル「users」でrow番号が0のレコードについて、カラム「name」の4文字目の文字は「t」だと分かります。
文字コード SQL文の真偽
96(`) 302
112(p) 302
114(r) 302
115(s) 302
116(t) 200
120(x) 200
© Hitachi, Ltd. 2020. All rights reserved.
問11. 【Web】blindexfil (5/5)
28
【解答】
HSCTF{n1c3_b1ind_4na1isy5}
ログのSQL文を確認すると、データベース「hsc_tf_db」のテーブル「users」について、row番号が0~20のレコードに対し、以下のカラムの値を取得していることが分かります。• id• name• password• profile
その中からSQL文が真である結果を精査すると、データベース「hsc_tf_db」のテーブル「users」でrow番号が13のレコードについて、カラム「profile」にフラグが入っていることが分かります。
一見、原理はとても地味で面倒くさい攻撃方法で、「こんな攻撃、実際にあるのか?」と思われるかもしれませんが、成功すればデータベースの全ての情報を露出できますし、ペネトレーションテスト用のツールを使えばより簡単に攻撃できます。なお、Blind SQL Injection攻撃への対策方法は、通常のSQL Injection攻撃と同様です。
© Hitachi, Ltd. 2020. All rights reserved.
問12. 【Binary】メモリーダンプ (1/3)
29
【問題文】
あなたはこのアプリケーションが何を考えているかわかるでしょうか。
※実害のないプログラムですが、ウイルス対策ソフトウェアで検知される可能性があります。
【関連ファイル】
WindowsFormsApplication1.exe
本問題のポイント
• アプリケーションを実行すると、フラグを入力する画面が表示され、入力した値がフラグであるか判定結果を表示するのみです
• 他にアプリケーションの動きを確認する方法がないか調査してみましょう
誤ったフラグを入力
© Hitachi, Ltd. 2020. All rights reserved.
問12. 【Binary】メモリーダンプ (2/3)
30
解説
アプリケーションを実行すると、実行している内容はパソコンのメモリー上に展開されます。通常のファイルと異なり、メモリーの中身は直接見ることはできません。しかし、メモリーダンプと呼ばれるファイルに保存したり、場合によっては、悪意のあるプログラムに直接内容を読み取られることもあります。(Windowsでは、タスクマネージャーを起動し、対象のアプリケーションを右クリックすることで、メモリーダンプを取得することができます)
対象アプリケーションを右クリックし、[ダンプ ファイルの作成(C)]を選択
© Hitachi, Ltd. 2020. All rights reserved.
問12. 【Binary】メモリーダンプ (3/3)
31
【解答】
HSCTF{do_not_save_important_information_in_memory}
今回の問題では関連ファイルのアプリケーションを実行し、メモリーダンプを取得します。取得したメモリーダンプをテキストエディターで開くと、通常のテキストファイルではないため、読めない文字なども表示されます。しかし、フラグ形式である”HSCTF”で検索するとフラグが見つかり、メモリー上にフラグが存在していたことが分かります。
アプリケーション上で重要な情報(パスワードなど)を扱う場合は、以下を心がけましょう。• 必要最低限の期間だけ、メモリー上に展開する• 不要になったら、ダミーのデータで上書きなどして、確実にメモリー上から削除する• 重要なデータを平文のままメモリー内に置かない
メモリー上のフラグを入力
© Hitachi, Ltd. 2020. All rights reserved.
問13. 日立ソリューションズのセキュリティアナリスト (1/2)
32
【問題文】
日立ソリューションズのセキュリティアナリストのつぶやき(下記URL)を調査して、フラグを完成させましょう。
https://securityblog.jp/securityanalyst/
HSCTF{①②③④⑤⑥} (①②③④⑤⑥はすべて大文字の半角英字)
①2019/10/28~29にセキュリティアナリストが運営スタッフとして参加した、日本発の情報セキュリティ国際会議の頭文字
②2020/4/16の記事で解説されているWindows機能の頭文字
③セキュリティアナリストが参加したBlack Hat USA2019の会場(統合型リゾート)
の頭文字
④2019/12/21~22にセキュリティアナリストが出場したCTF大会名の先頭から2番目の文字
⑤ブログにWriteup(CTFの問題解説)を掲載している、DEF CON CTF Qualifier 2019の問題タイトルの頭文字
⑥Black Hat Europe 2019に参加したセキュリティアナリストが受講したトレーニング名の頭文字
© Hitachi, Ltd. 2020. All rights reserved.
問13. 日立ソリューションズのセキュリティアナリスト (2/2)
33
【解答】
HSCTF{CAMERA}
解説
日立ソリューションズのセキュリティアナリストが独自の視点でセキュリティ情報をお届けするブログ「セキュリティアナリストのつぶやき」から情報を集め、フラグを完成させる問題です。
問題文のURLにアクセスし、問題文のキーワード(日時、カンファレンス名など)をもとに該当する記事を見つけ出し、フラグを完成させます。解答と記事の掲載日は以下です。
① C(CODE BLUE):2020/01/16② A(AMSI):2020/04/16③ M(Mandalay Bay):2019/11/25④ E(SECCON CTF 2019):2019/12/25⑤ R(redacted-puzzle):2019/11/25⑥ A(Assessing and Exploiting Control Systems & IIoT):2019/12/19
セキュリティカンファレンスの参加レポートやCTFの問題解説など、様々な記事を掲載しているので、今後もぜひチェックしてみてください。
© Hitachi, Ltd. 2020. All rights reserved.
問14. 【Crypto】そすんせから (1/2)
34
【問題文】日本語を研究しているJ研究所では、日本語を利用した新しい暗号の開発に着手しました。手始めに、以下のような暗号を開発したのですが、解読できますか?
はりちき にと くとそかは「まちせちみいとい のいんこらちすし」るちりせくちこいかと もなとか こい そちせにかちりについしる
【ヒント】鍵はあなたの手元にあるのでは?
本問題のポイント
• 日本語を利用した暗号のため、復号にも日本語を利用すると考えられます• 手元にある日本語を探してみましょう
© Hitachi, Ltd. 2020. All rights reserved.
問14. 【Crypto】そすんせから (2/2)
35
【解答】
HSCTF{JAPANESE_KEYBOARD}
解説
問題の文字列は単一換字式暗号によって暗号化されています。
【単一換字式暗号】平文の文字に対して、暗号文の文字が必ず同じ文字に変換される暗号を指す。仕組みが単純であり、簡単に解読される。
日本語キーボードで暗号文に対応する日本語キーを打鍵すると、以下の文章になります。flag is hsctf{japanese_keyboard}.alphabets must be capitalized.
今回の問題では暗号の鍵として、日本語キーボードが使用されています。
Fは
例えば平文が”F”の場合、暗号文は同じキーにあるひらがな”は”になる
© Hitachi, Ltd. 2020. All rights reserved.
問15. 【Stegano】日立サイバーセキュリティセンター (1/4)
36
【問題文】
日立サイバーセキュリティセンターの二つの画像から、フラグを見つけてください。
【関連ファイル】
日立サイバーセキュリティセンター.xlsx
本問題のポイント
• 関連ファイル(Excelファイル)を開くと二つシートがあり、各シートに画像ファイルが貼り付けられています
• それぞれの画像からフラグ情報を探してみましょう
日立サイバーセキュリティセンターとは、2019年12月に開設した日立グループにおける高度セキュリティ人財の育成、およびサイバーセキュリティ研究を目的とした施設です。https://www.hitachi.co.jp/New/cnews/month/2019/12/1205.html
© Hitachi, Ltd. 2020. All rights reserved.
問15. 【Stegano】日立サイバーセキュリティセンター (2/4)
37
解説画像ごとに解き方が異なるため、画像ごとに解説します。【一枚目】一枚目の画像のポイントは、二つの画像が重なっていることです。上の画像をずらしてよく見ると、うっすらと文字が見えます。これは「アルファチャンネル」と呼ばれる画像の透明度を表す情報を利用して、フラグを画像に隠しています。
二つの画像が重なっており、上の画像にうっすら文字が見える
© Hitachi, Ltd. 2020. All rights reserved.
問15. 【Stegano】日立サイバーセキュリティセンター (3/4)
38
画像を加工せず目を凝らして読むこともできますが、以下の方法で画像の文字を読みやすくできます。
以下のように表示されているFlag 1/2:HSCTF{Al
pha_Ch4n_&_
上記の方法で、画像からフラグの半分「Flag 1/2:HSCTF{Alpha_Ch4n_&_」が分かります。
1. Excelで対象の画像を選択し、[図形の形式]タブの[調整]-[色]-[色の変更]で文字が読みやすい色に変更する。
2. 背景(セル)を黒に変更し、色を変更した画像を重ねる。
© Hitachi, Ltd. 2020. All rights reserved.
問15. 【Stegano】日立サイバーセキュリティセンター (4/4)
39
【解答】
HSCTF{Alpha_Ch4n_&_A_textual_data_chunk}
【二枚目】画像のファイル形式であるPNGは、チャンクと呼ばれる複数のデータブロックで構成され、各チャンクは画像について様々な情報を保持しています。今回の問題では、PNGファイルのtEXTチャンクと呼ばれるテキストデータを格納できる領域に、フラグが隠されています。Excelに貼り付けられている画像ファイル(※)をテキストエディターで開きます。”Flag”で検索すると、フラグの残り半分である「Flag 2/2:A_textual_data_chunk}」が見つかります。※Excelファイルの拡張子を.zipに変更して解凍し、解凍したフォルダの
“xl¥media¥image3.png”から取得できます。
一枚目と二枚目の文字列を組み合わせることで、フラグが「HSCTF{Alpha_Ch4n_&_A_textual_data_chunk}」だとわかります。
© Hitachi, Ltd. 2020. All rights reserved.
問16. 【Crypto】証明書ファイル (1/3)
40
【問題文】
この証明書ファイルから、発行者のOUを調べてください。
【関連ファイル】
public-key.crt
本問題のポイント
• 関連ファイルの電子証明書の内容を調査してみましょう
© Hitachi, Ltd. 2020. All rights reserved.
問16. 【Crypto】証明書ファイル (2/3)
41
解説
電子証明書とは、暗号化やデジタル署名に用いる公開鍵の送り主が信頼できることを証明する仕組みです。この証明書は認証局が発行しており、通信相手が送ってきた証明書を認証局に照会することで、通信相手の身元を確認することができます。
クライアント
証明書
サーバー
①公開鍵と証明書を取得
②通信を公開鍵で暗号化
公開鍵
秘密鍵
© Hitachi, Ltd. 2020. All rights reserved.
問16. 【Crypto】証明書ファイル (3/3)
42
【解答】
HSCTF{How_to_extract_certificate_file?}
電子証明書には証明書に関する情報(有効期間、署名アルゴリズムなど)が含まれており、証明書ファイルを開き、[詳細]タブから確認することができます。今回の問題の発行者のOUは、発行者フィールドから確認できます。
この問題の証明書は、発行者と主体者が同一である(自分自身が発行した)自己署名証明書です。身元が不確かな証明書をむやみにインストールするのは控えましょう。
© Hitachi, Ltd. 2020. All rights reserved.
問17. 【Crypto】RSA (1/3)
43
【問題文】
RSA暗号を復号してください。
Windowsの電卓で解けます。
n = 2108147221
e = 1405360563
d = 3
c1 = 1659210285
c2 = 2083154883
c3 = 272338880
本問題のポイント
• RSA暗号の仕組みを確認し、暗号文を復号しましょう
© Hitachi, Ltd. 2020. All rights reserved.
問17. 【Crypto】RSA (2/3)
44
解説
問題文からRSA暗号に関する問題だとわかります。RSA暗号は公開鍵暗号方式(皆に公開する鍵(公開鍵)と自分だけが持ってる鍵(秘密鍵)の2つの鍵を使ってやり取りする暗号化方式)です。RSAの公開鍵は整数nとe、秘密鍵は整数nとd(dはnとeから算出する)で生成され、それらをもとに暗号文を作成する手順は以下の通りです。
C = M^e (mod n)
• Mは平文(Message)を、Cは暗号文(Ciphertext)を表し、MとCは 1 ~ n - 1 の整数となる。
• “^”はべき乗を表し、M^eはMのe乗となる。• (mod n)はnで割った余りを表す。
暗号文を復号するには、以下のように計算する。M = C^d (mod n)
© Hitachi, Ltd. 2020. All rights reserved.
問17. 【Crypto】RSA (3/3)
45
【解答】
HSCTF{d=3}
問題文のc1、c2、c3が暗号文であるため、復号の計算式に当てはめて、各値の復号を試みます。暗号文の復号に必要な情報(n、d、c)は揃っているため、復号の計算式に当てはめます。
M = C^d (mod n)に対し、 n、d、c1の値を当てはめる。M = 1659210285^3 (mod 2108147221)
= 1213416276
同じようにc2、c3を計算すると、それぞれ、1182491709、13181となります。(人力では難しいので、関数電卓モードで計算することをおすすめします)これらの数字を16進数に変換し、ASCIIコード表から文字に変換すると、フラグを取得することができます。
RSA暗号は、現代のコンピューターセキュリティで最も重要で最も利用されている、公開鍵暗号です。RSA暗号が発明されていなければ、共通鍵はいまだに郵送されていたかもしれませんね。
© Hitachi, Ltd. 2020. All rights reserved.
問18. 【Reverse】oddsum (1/5)
46
【問題文】
某地下組織への潜入に成功し、開発中のマルウェアを発見した。
しかし、各所に罠が仕掛けられており、持ち出せる情報は限られていた。
重要な情報は採取してきたはずだ。解析してほしい。
【関連ファイル】
oddsum.txt
本問題のポイント
• 関連ファイル(txtファイル)にアセンブラコードが書かれています• コードを解析し、マルウェアの動きを読み解いてみましょう
© Hitachi, Ltd. 2020. All rights reserved.
問18. 【Reverse】oddsum (2/5)
47
解説
アセンブラコードを読む問題です。関連ファイルのアセンブラコードを読むと、入力した文字列を8バイトずつ区切って数値とみなし、その数値の回数分、1+3+5+...と奇数の総和を求めていることがわかります。
【oddsum.txtの概要】<odd_sum>入力した数値の回数分、1+3+5+7+...と奇数の総和を求める
<calc>① 入力した文字列を8バイトずつ区切って数値とみなす② ①の数値で関数odd_sumを呼び出す③ odd_sumの結果を出力する
<5行の文字列>calcの引数にフラグの文字列が指定された結果と推測
そのため、oddsum.txtの最後に記載されている値(総和)を、文字列に戻す必要があります。しかし、回数が多すぎるため、そのまま計算すると数十年かかります。
© Hitachi, Ltd. 2020. All rights reserved.
問18. 【Reverse】oddsum (3/5)
48
【解答】
HSCTF{The sum of odd numbers is squared}
ここで、奇数の総和がそれぞれどうなるかを調べると下記のようになります。1 = 11+3 = 41+3+5 = 91+3+5+7 = 161+3+5+7+9 = 25:
証明は省略しますが、総和は加算回数の平方になっています。したがって、総和の平方根で5行の文字列を戻せば、フラグの文字列になります。
アセンブラコードを読むのはリバースエンジニアリングの基礎です。セキュリティをめざす人は、簡単なコードは読めるようになっておきましょう。なお、ソフトウェア製品はリバースエンジニアリングが禁止されている場合がほとんどです。必ず規約を確認してください。腕を磨きたい場合はCTFを活用しましょう。
アセンブラ解析の詳細は参考資料をご参照ください。
© Hitachi, Ltd. 2020. All rights reserved.
問18. 【Reverse】oddsum (4/5)
49
uint128 odd_sum(uint64 rdi) {uint128 a = 0;uint128 b = 1;for (uint64 i=0; i<rdi; i++) {
a += b;b += 2;
}return a;
}
補足(odd_sum関数の解析内容)
67c: 48 8b 45 e0 mov rax,QWORD PTR [rbp-0x20]680: 48 8b 55 e8 mov rdx,QWORD PTR [rbp-0x18]684: 48 01 45 f0 add QWORD PTR [rbp-0x10],rax688: 48 11 55 f8 adc QWORD PTR [rbp-0x8],rdx68c: 48 83 45 e0 02 add QWORD PTR [rbp-0x20],0x2691: 48 83 55 e8 00 adc QWORD PTR [rbp-0x18],0x0
渡された文字列を数値に変換した回数分、
奇数を足し合わせる
© Hitachi, Ltd. 2020. All rights reserved.
問18. 【Reverse】oddsum (5/5)
50
void calc(uint64 rdi[]) {uint128 x;for (int i=0; i<=39; i+=8) {
rax = rdi[i/8];x = odd_sum(rax);printf("%016lx%016lx¥n", x);
}}
補足(calc関数の解析内容)
6c4: 8b 45 fc mov eax,DWORD PTR [rbp-0x4]6c7: 48 63 d0 movsxd rdx,eax6ca: 48 8b 45 d8 mov rax,QWORD PTR [rbp-0x28]6ce: 48 01 d0 add rax,rdx6d1: 48 8b 00 mov rax,QWORD PTR [rax]6d4: 48 89 45 f0 mov QWORD PTR [rbp-0x10],rax6d8: 48 8b 45 f0 mov rax,QWORD PTR [rbp-0x10]6dc: 48 89 c7 mov rdi,rax6df: e8 66 ff ff ff call 64a <odd_sum>
引数の文字列を8バイトずつodd_sum関数へ渡す
© Hitachi, Ltd. 2020. All rights reserved.
参考資料 oddsumアセンブラ解析詳細(1/8)
51
本資料では、oddsum問題で出題されたアセンブラについて、詳細に解説します。なお、基本的なアセンブラ(情報処理技術者試験のCASL程度)の知識があることを前提としています。
【calc関数解析】アセンブラを眺めると、odd_sum関数とcalc関数の二つの関数があり、calc関数からodd_sum関数を呼んでいることが、6df: e8 66 ff ff ff call 64a <odd_sum>から分かります。どちらから解析しても構いませんが、まずはコール元のcalc関数から見てみます。
00000000000006af <calc>:6af: 55 push rbp6b0: 48 89 e5 mov rbp,rsp6b3: 48 83 ec 30 sub rsp,0x30rbp(ベースポインタ)をスタックに積んで、現rsp(スタックポインタ)をrbpに設定し、自関数で使うスタック領域を0x30バイト
確保しています。
6b7: 48 89 7d d8 mov QWORD PTR [rbp-0x28],rdi6bb: c7 45 fc 00 00 00 00 mov DWORD PTR [rbp-0x4],0x0rdiと定数0をスタックに設定しています。ここで、QWORDは8バイト、DWORDは4バイトを示しています。またrdiは、慣例的に関数の第1引き数として使われます。
つづく
参考資料:アセンブラ解析詳細
© Hitachi, Ltd. 2020. All rights reserved.
参考資料 oddsumアセンブラ解析詳細(2/8)
52
ここまでの処理を実行したあとのrbp、rspと、実行する前の旧rbp、push前後のrspの関係をスタックの状態とともに以下に示します。
+-----------------+rbp-0x30 | | ←rsp
+-----------------+rbp-0x28 | rdi |
+-----------------+rbp-0x20 | |
+-----------------+rbp-0x18 | |
+-----------------+rbp-0x10 | |
+-----------------+rbp-0x08 | |
+--------+--------+rbp | | 0 | ←push後のrsp
+--------+--------+| 旧rbp | ←push前のrsp+-----------------+
このあとスタックに値を設定する命令では、この図に値を埋めてみてください。
6c2: eb 52 jmp 716 <calc+0x67>次の行を見ると、いきなりジャンプ命令が現れています。716: 83 7d fc 27 cmp DWORD PTR [rbp-0x4],0x2771a: 7e a8 jle 6c4 <calc+0x15>ジャンプ先で[rbp-0x4] <= 0x27の判定を行い、6c4番地に戻ります。このパターンはforループでよく利用されます。
つづく
© Hitachi, Ltd. 2020. All rights reserved.
参考資料 oddsumアセンブラ解析詳細(3/8)
53
cmp命令の直前で712: 83 45 fc 08 add DWORD PTR [rbp-0x4],0x8としているので、C言語風に書くと
for (int i=0; i<=39; i+=8) {となります。
6c4: 8b 45 fc mov eax,DWORD PTR [rbp-0x4]6c7: 48 63 d0 movsxd rdx,eax6ca: 48 8b 45 d8 mov rax,QWORD PTR [rbp-0x28]6ce: 48 01 d0 add rax,rdx6d1: 48 8b 00 mov rax,QWORD PTR [rax]ここでは次のような処理を行っています。
rax = *(rdi + i);raxには8バイト分のデータを設定しています。
6d4: 48 89 45 f0 mov QWORD PTR [rbp-0x10],rax6d8: 48 8b 45 f0 mov rax,QWORD PTR [rbp-0x10]6dc: 48 89 c7 mov rdi,rax6df: e8 66 ff ff ff call 64a <odd_sum>raxの値をrdi(第1引き数)に設定して、odd_sum関数を呼び出します。
6e4: 48 89 45 e0 mov QWORD PTR [rbp-0x20],rax6e8: 48 89 55 e8 mov QWORD PTR [rbp-0x18],rdxodd_sum関数からの戻り値(raxとrdx)をスタックに設定します。
つづく
© Hitachi, Ltd. 2020. All rights reserved.
参考資料 oddsumアセンブラ解析詳細(4/8)
54
6ec: 48 8d 45 e0 lea rax,[rbp-0x20]6f0: 48 8b 10 mov rdx,QWORD PTR [rax]6f3: 48 8d 45 e0 lea rax,[rbp-0x20]6f7: 48 83 c0 08 add rax,0x86fb: 48 8b 00 mov rax,QWORD PTR [rax]6fe: 48 89 c6 mov rsi,rax先ほどスタックに設定した値をrdxとrsiに取り出します(rbp-0x20から取り出す命令はlea命令なので、スタックのアドレスを
取り出していることに注意します)。
701: 48 8d 3d cc 00 00 00 lea rdi,[rip+0xcc] # 7d4 <_IO_stdin_used+0x4>このあとprintf関数を呼び出すので、第1引き数に書式文字列を渡していることが考えられます。与えられたテキストファイルをよく見ると、先頭に以下の記載があります。
000007d0 01 00 02 00 25 30 31 36 6c 78 25 30 31 36 6c 78 |....%016lx%016lx|000007e0 0a 00 00 00 01 1b 03 3b 48 00 00 00 08 00 00 00 |.......;H.......|つまり、7d4番地には“%016lx%016lx¥n”が入っており、これをprintf関数に渡しています。
708: b8 00 00 00 00 mov eax,0x070d: e8 0e fe ff ff call 520 <printf@plt>rdxとrsiの値を、16進数で16桁ずつ表示します。
つづく
© Hitachi, Ltd. 2020. All rights reserved.
参考資料 oddsumアセンブラ解析詳細(5/8)
55
calc関数を整理すると次のようになります。void calc(uint64 rdi[]) {
uint128 x;for (int i=0; i<=39; i+=8) {
rax = rdi[i/8];x = odd_sum(rax);printf("%016lx%016lx¥n", x); // 実際にはxを64bitずつ二つに分けてprintf関数に渡す。
}}
まとめると、40バイトのデータを8バイトずつ区切って、odd_sum関数でなんらかの処理を行い、結果の16バイトを16進数で表示しています。
【odd_sum関数解析】calc関数の解析から、引き数で8バイトの値を入力し、戻り値で8バイト×2=16バイトの値を返すことが分かっています。
000000000000064a <odd_sum>:64a: 55 push rbp64b: 48 89 e5 mov rbp,rspスタックポインタとベースポインタを更新します。
64e: 48 89 7d c8 mov QWORD PTR [rbp-0x38],rdi引き数rdiをスタックに設定します。
つづく
© Hitachi, Ltd. 2020. All rights reserved.
参考資料 oddsumアセンブラ解析詳細(6/8)
56
652: 48 c7 45 f0 00 00 00 mov QWORD PTR [rbp-0x10],0x0659: 00 65a: 48 c7 45 f8 00 00 00 mov QWORD PTR [rbp-0x8],0x0661: 00 連続したスタック領域16バイトに0を設定します。
662: 48 c7 45 e0 01 00 00 mov QWORD PTR [rbp-0x20],0x1669: 00 66a: 48 c7 45 e8 00 00 00 mov QWORD PTR [rbp-0x18],0x0671: 00 連続したスタック領域16バイトに1を設定していると仮定します。もしそうだとすると、0x1と0x0の前後関係からリトルエンディアンと推測されます。
672: 48 c7 45 d8 00 00 00 mov QWORD PTR [rbp-0x28],0x0679: 00 67a: eb 1f jmp 69b <odd_sum+0x51>ジャンプした先で、69b: 48 8b 45 d8 mov rax,QWORD PTR [rbp-0x28]69f: 48 3b 45 c8 cmp rax,QWORD PTR [rbp-0x38]6a3: 72 d7 jb 67c <odd_sum+0x32>calc関数でも見たものと同じ形です。ただし条件が異なるので注意が必要です。
for (uint64 i=0; i<rdi; i++) {
67c: 48 8b 45 e0 mov rax,QWORD PTR [rbp-0x20]680: 48 8b 55 e8 mov rdx,QWORD PTR [rbp-0x18]このスタック領域のペアには1が初期設定されていました。
つづく
© Hitachi, Ltd. 2020. All rights reserved.
参考資料 oddsumアセンブラ解析詳細(7/8)
57
684: 48 01 45 f0 add QWORD PTR [rbp-0x10],rax688: 48 11 55 f8 adc QWORD PTR [rbp-0x8],rdxその1をこのペアに加算します。ここで、add命令は通常の加算命令です。桁あふれしたときはキャリーフラグが立ちます。また、adc命令は二つの値を加算
したうえで、キャリーフラグ(0または1)を加算します。つまり、上位桁の加算にadc命令が利用されます。このことからも、やはりリトルエンディアンと推測されます。
68c: 48 83 45 e0 02 add QWORD PTR [rbp-0x20],0x2691: 48 83 55 e8 00 adc QWORD PTR [rbp-0x18],0x0初期値で1を設定したペアに2を加算します。for文を繰り返すたびに1, 3, 5, 7, ...のように増えていきます。
6a5: 48 8b 45 f0 mov rax,QWORD PTR [rbp-0x10]6a9: 48 8b 55 f8 mov rdx,QWORD PTR [rbp-0x8]for文を抜けたところで、計算結果のペアをraxとrdxに設定してコール元に返します。
この関数をあらためて整理すると次のようになります。uint128 odd_sum(uint64 rdi) {
uint128 a = 0;uint128 b = 1;for (uint64 i=0; i<rdi; i++) {
a += b;b += 2;
}return a;
}ここでやっている処理は、rdiの値の回数分、1+3+5+...のように奇数値を加算しています。
つづく
© Hitachi, Ltd. 2020. All rights reserved.
参考資料 oddsumアセンブラ解析詳細(8/8)
58
【アセンブラ解析後】解説資料にあるとおり、それぞれの16進数値の平方根を計算し、ASCIIコードとみなして8文字ずつの文字列に変換します。注意点として、この処理はリトルエンディアンで動作している可能性があるため、文字列がバイト単位で逆転している可能性を
考慮する必要があります。以下の表に、表示された5つの16進数からフラグ文字列の導出までを示します。
表示値 平方根 10進数→16進数 文字列化 逆順化
2a84c00a45faa82409d4fbbbf2c7c440 7517769219979825992 0x68547B4654435348 "hT{FTCS
H"
"HSCTF{Th
"
28fcbe145c9f23d0959b456470d767d9 7381153968777535589 0x666F206D75732065 "fo mus e" "e sum of"
2ecd35a56e7924ce6339e638013cc400 7887331407811604256 0x6D756E2064646F20 "mun ddo " " odd num"
041d0e4fbb2ff4f07ddfb6b47f6e7984 2338328219632166242 0x2073692073726562 " si sreb" "bers is "
3d6b32711cbc488c8d0ffe460b64b9a9 9035458294347821427 0x7D64657261757173 "}derauqs" "squared}"
これをつなげると、フラグ文字列HSCTF{The sum of odd numbers is squared}
になります。
© Hitachi, Ltd. 2020. All rights reserved.
問19. 【Forensics】USBキーボード (1/3)
59
【問題文】
USBキーボードのキャプチャーデータを解析してください。
【関連ファイル】
usb.zip
本問題のポイント
• USBキーボードで文字を入力した場合の、キャプチャーデータを確認してみましょう
© Hitachi, Ltd. 2020. All rights reserved.
問19. 【Forensics】USBキーボード (2/3)
60
解説
Wiresharkで確認してみると、プロトコルが全て「USB」となっています。PCはUSBキーボードと定期的に通信しており、その送受信データは全て「Leftover Capture Data」の8バイトで確認できます。
8バイトの数字では入力内容が分からないため、インターネットで「USBキーボードのキーコード一覧」を検索し、キーボード入力時のキーコード一覧を確認します。
© Hitachi, Ltd. 2020. All rights reserved.
問19. 【Forensics】USBキーボード (3/3)
61
【解答】
HSCTF{USB Keyboard is capturabl3}
キーコード一覧をもとにパケットを確認すると、文字入力以外のパケットも含まれています。• 「00:00:00:00:00:00:00:00」…キーボード入力なし• 「02:00:00:00:00:00:00:00」…[Shift]キー押下時のパケット上記の除外条件として情報を絞り込みます。その後、抽出したパケットの「Leftover Capture Data」をキーコード一覧から確認し、入力内容からフラグを見つけだします。
なお、キーコード一覧と実際のキーコードが一致しない箇所もあるため(「{」と「}」)、実態と合わせる必要があります。
「02000b0000000000」の場合キーコード一覧から「H」だとわかる
© Hitachi, Ltd. 2020. All rights reserved.
問20. 【Misc】Wordの中身 (1/2)
62
【問題文】
Wordファイルの中に何か仕込まれているようだ。
解析してほしい。
【関連ファイル】
Wordの中身.docx
本問題のポイント
• Wordデータの中身(Wordデータを構成するファイル群)を調べてみましょう
© Hitachi, Ltd. 2020. All rights reserved.
問20. 【Misc】Wordの中身 (2/2)
63
【解答】
HSCTF{docx_files_are_compressed_with_zip}
解説
Word(docx)ファイルはOffice Open XMLフォーマットのドキュメントで、XMLファイルなどがzip圧縮されています。XMLの知識があれば、XMLファイル内に情報を隠すことも可能です。
ファイルの拡張子を.zipに変換すると、ファイルを解凍しXML形式のファイルを取り出すことができます。ファイル構成を見るとdocument.xmlとdocument2.xmlの2種類のXMLファイルが確認できます。2つのファイルを比較すると、document2.xmlに解答のフラグが設定されていることが確認できます。
実際に、Wordファイルの中にウイルスを隠す可能性も指摘されています。普段使っているファイルがどのような構造で情報を格納しているかを知ることは、セキュリティの第一歩です。
フラグの文字がばらして設定されている
© Hitachi, Ltd. 2020. All rights reserved.
問21. 【Misc】Wordの外身 (1/2)
64
【問題文】
Wordファイルの外(?)に何か仕込まれているようだ。
解析してほしい。
【関連ファイル】
Wordの外身.docx
本問題のポイント
• Wordファイルは複数のファイルがzip圧縮されたものです• ファイルを圧縮する際にできることを調査してみましょう
© Hitachi, Ltd. 2020. All rights reserved.
問21. 【Misc】Wordの外身 (2/2)
65
【解答】
HSCTF{ZIP_files_can_contain_comments_in_plaintext}
解説
「Wordの中身」の問題と同じようにzipで解凍できますが、今回は不審なファイルもフラグの形跡もなく、Wordで開いてもフラグは見つかりません。問題タイトルをヒントに、Wordファイルをそのままテキストエディターで開くと、平文でフラグ文字列を見つけることができます。
この問題では、zip圧縮時のコメントとしてフラグ文字列が仕込まれています。見破ることは技術的に難しいですが、テキストエディターで開いて検索する事は簡単です。不審なファイルをやむを得ず解析する場合は、そのままアプリケーションで開くのではなく、まずテキストエディターで内容を確認しましょう。
© Hitachi, Ltd. 2020. All rights reserved.
問22. 【Forensics】zeroexfil (1/4)
66
【問題文】
あなたは、あるセキュリティ侵害事件の調査を担当する、特別捜査班の一人です。
調査を進めると、犯人は外部の掲示板を使って仲間と連絡を取り合っていることが
わかりました。
関連ファイルは、2018/7/17に犯人が書き込んだ英文です。書き込まれた英文は、
これといって不審なところがないように見えます。しかし、特別捜査班による犯人の監視は完璧で、該当日は、この書き込み以外に、犯人が外部と通信した形跡はありません。あなたは、この書き込みに仲間へのメッセージが隠されていることは間違いないと考えています。この犯人が仲間に伝えたメッセージを突き止めてください。
【関連ファイル】
exfiltration.html
※フラグは、HSCTF{メッセージ}です。
本問題のポイント
• 書き込みにフラグ情報が無いか確認してみましょう• htmlのソース情報も確認してみましょう
© Hitachi, Ltd. 2020. All rights reserved.
問22. 【Forensics】zeroexfil (2/4)
67
解説
関連ファイルのhtmlファイルを確認してみても、一見不審な点は見受けられません。ですが、実は「ゼロ幅文字エンコーディング」という手法で文字が隠されています。「ゼロ幅文字エンコーディング」とは、ブラウザーなどでは表示されない(ゼロ幅の)文字を各単語の末尾にこっそりと隠す手法です。一部のテキストエディター以外では文字があるよう見えないため、ブラウザーなどで関連ファイルを確認しても、不審な点が見受けられないということです。
一見ではわからないが、単語と空白文字の間に、ゼロ幅文字が存在している
© Hitachi, Ltd. 2020. All rights reserved.
問22. 【Forensics】zeroexfil (3/4)
68
1. ゼロ幅文字を確認できるテキストエディターで関連ファイルを開きます。(今回はサクラエディタ Ver. 2.2.0.1で確認しています)
2. U+200B/U+200Cをコピー&ペーストし、正規表現の置き換え機能でU+200B/U+200C以外の文字を削除します。
今回はUnicode文字を“1”と“0”に見立てています。
ゼロ幅文字である事がわかれば以下の手順で解くことができます。
u+200B ⇒ 1 u+200C ⇒ 0と見立てている
使用する正規表現→[ ̂U+200BU+200C]置き換え後の文字列→空白※ U+200B/U+200Cはコピー&ペーストする
© Hitachi, Ltd. 2020. All rights reserved.
問22. 【Forensics】zeroexfil (4/4)
69
【解答】
HSCTF{some_editor_display_zero-width-char_as_whitespace}
攻撃者は、どのようにして誰にも見つからず侵入するかだけではなく、どのようにして誰にも見つからずに情報を外部に持ち出すかも考えています。今回の問題は、攻撃者が情報を外部に持ち出す手法の一つです。
3. U+200Bを“1”で、U+200Cを“0”に置換します。4. “1”と“0”だけの文字列を8ビットごとに区切って、ASCIIコード表から文字に変換
します。
5. 4.で変換した文字列を、Base64でデコードすると、フラグが現れます。
SFNDVEZ7c29tZV9lZGl0b3JfZGlzcGxheV96ZXJvLXdpZHRoLWNoYXJfYXNfd2hpdGVzcGFjZX0=
HSCTF{some_editor_display_zero-width-char_as_whitespace}
© Hitachi, Ltd. 2020. All rights reserved.
問23. 【Network】情報漏えい…しちゃった? (1/3)
70
【問題文】
あなたはH社の情報システム部門で働いています。
ある日、ファイアウォールを導入している外部公開サーバーから情報が漏えいしている痕跡を見つけました。
通信ログ(pcapファイル)を解析し、どのようなデータが外部へ送信されたか調査してください。
【関連ファイル】
Question.pcap
本問題のポイント
• 通信内容から外部通信を行っているデータを見つけ、通信内容を調査しましょう
© Hitachi, Ltd. 2020. All rights reserved.
問23. 【Network】情報漏えい…しちゃった? (2/3)
71
解説
本問題はICMPプロトコルを使用して、フラグ情報を送信する問題です。関連ファイルをWiresharkで開き通信内容を確認すると、ICMPプロトコルで外部との通信が発生していることがわかります。ICMPパケットはデータ部に任意のデータを配置することが可能です。今回の問題では分割されたフラグを記載したTXTデータを、複数回(5回)に分けて送信しています。
フラグ情報を分割し複数回に分けて送信
© Hitachi, Ltd. 2020. All rights reserved.
問23. 【Network】情報漏えい…しちゃった? (3/3)
72
【解答】
HSCTF{ICMP_TUNNEL}
ファイアウォールにてhttpやftpポートをブロックしても、ICMPプロトコルをブロックしていない場合(※1)、ICMPパケットを用いてデータの送受信が可能です。
ICMPプロトコルを使ってバイナリデータ通信を行う技術は、マルウェアに感染したサーバーと、攻撃者のC&Cサーバーでの通信に悪用される事例もあります(※2)。従来のパケットフィルタリング方式のファイアウォールでは検出できない攻撃が増えており、その対策として、ファイル共有ソフトウェアの検知などでも使用されているDeep Packet Inspection方式を使用した検知が一般的に言われています。
※1:障害発生時のトラブルシューティングを優先するなど、運用保守の観点からICMPプロトコルをブロックしないケースがあります。
※2:標的型攻撃に利用されるplugx(0x36a4タイプ)が、C&Cサーバーとの通信する際の通信方式の一つとして利用している事例があります。
© Hitachi, Ltd. 2020. All rights reserved.
商標類
73
◼ Bluetooth® ワードマークおよびロゴは登録商標であり、Bluetooth SIG, Inc. が所有権を有します。
◼ Microsoft、Windows、Excel、Wordは、米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
◼ Twitterは、Twitter,Inc. の登録商標です。
◼ その他、本資料に記載されている会社名、製品名、サービス名などはそれぞれの会社の商標または登録商標です。
© Hitachi, Ltd. 2020. All rights reserved. 75
セキュリティコンテストにチャレンジしよう!~問題解説~
END