検索
連載

「鍵は“J”の中にあるよ」CTF by ダークナイト解答編セキュリティ・ダークナイト(3)(2/4 ページ)

第3回は「ダークナイトからの挑戦状」解答編です。さらなるトリッキーな問題も用意したので、もの足りないチャレンジャーも必読の記事です(編集部)

Share
Tweet
LINE
Hatena

echo request(type 8)に隠されたシークレットメッセージ

 行き詰ったら、問題文に立ち返ろう。そこには、CTF出題者が込めた思いがあるはずだ。

 「Jは、2つの隠されたなぞを解決するだろう」。「なぞを解決する」という部分から考えると、zip展開のパスワードについてのことではないかと仮定される。つまり、出題者がこの問題文に込めたものとは、

[i] 2つの隠されたなぞが存在する。

[ii] それを解決してくれる「J」とは何か。

であると考えられる。

 まずは、[i]をパケットファイル内から探してみよう。パケットファイルの中身は先ほども整理した通り、通信の内容は、ICMPとFTPである。FTPについては、通信を見ても分かる通り、通常の認証を行い、[CWD]したあと、ファイルをダウンロードを行っているだけで「隠されたなぞ」といえる怪しいと思われる点はない。

 次に、ICMP通信に注目してみよう。

 ICMPの通信は、前述した通り、ICMP Echo (ping) request が2つと、その応答であるICMP Echo (ping) replyが2つ存在している。データ部分を見比べていただければ、requestとreplyで内容が同じであるため、文字列としてはユニークなものが2つあることが分かる。

図10 ICMP通信のデータその1
図10 ICMP通信のデータその1
図11 ICMP通信のデータその2
図11 ICMP通信のデータその2

データ部分の文字列を抽出すると下記の通りである。

2:ZYpwzqSIeT7FU

1:$1$ZX$mvBOzellP.O9Me/P.Jnqb/

リスト1 データ部分を抽出

整理したポイントに、このようなものがあったことを思い出してほしい。

  1. 192.168.0.20はWindows系、192.168.0.150はLinux系OSと思われる

 Windows系、Linux系OS間の通信であることが挙げられている。これらのOSが標準付属のICMP Echo requestを送信した場合、このパケットと同様のデータとなるかどうかの比較をしてみよう。

 図12はWindows系(XP)、図13は筆者の手元にあるLinux系(Ubuntu)OSに標準付属しているpingコマンドを実行した際のデータ部分である。

図12 Windows系のICMP Echo requestの内容
図12 Windows系のICMP Echo requestの内容
図13 Linux系のICMP Echo requestの内容
図13 Linux系のICMP Echo requestの内容

 実際に読者の方々も手元で再現してみれば分かるのだが

  • Windowsでは「abcdefghijklmnopqrstuvwabcdefghi」
  • Linuxでは「!"#$%&'()*+,-./01234567」

といったような規則が見つかることだろう。

 パケットファイル内に存在したICMP Echo requestと、この2つのOS標準の「ping」コマンドで送出したものとを比較すると、意図的に操作されたものであり、かなり怪しいと判断できる。この怪しい部分を元に戻す操作が必要だろう。とすれば、どう戻すのかを探さなければならない。

暗号化された文字列は

 文字とにらめっこし、思いつく限りの特徴からどういう処理をされている文字列であるのかを見つけ出さなければならない。ここでは、とらえるべき特徴について解説する。

 まず、1つ目の文字列「2:ZYpwzqSIeT7FU」と「1:$1$ZX$mvBOzellP.O9Me/P.Jnqb/」を見比べてみよう。「数字」+「:」となっている部分が共通している。ここで考えられることは、この部分は処理されたものではないのではないかと仮定できる。処理されている部分は「ZYpwzqSIeT7FU」と「$1$ZX$mvBOzellP.O9Me/P.Jnqb/」である。

 それでは、1つ目「ZYpwzqSIeT7FU」を見てみよう。

 先に種明かしをするが、この文字列はPerlのcrypt関数を用いて、DES(Data Encryption Standard)処理を行ったものだ。処理した方法は以下の通りである。

perl -e 'print crypt('暗号化前の文字列','2文字');'


 上記を実行すると、第1引数で与えた「暗号化前の文字列」の先頭8文字を第2引数の「2文字」をもとにして、文字列長13の文字列を生成する。ちなみに、先頭の2文字は第2引数で使った「2文字」である。「ZYpwzqSIeT7FU」は13文字であることから、このような処理を行っているのではないかと推測できる。

 次に、2つ目の文字列「$1$ZX$mvBOzellP.O9Me/P.Jnqb/」を見てみよう。この文字列で着目すべきところは、文字列の先頭からの3文字である。サーチエンジンで「$1$ ハッシュ」や「$1$ 暗号」などで検索するとさまざまヒントが見つかるだろう。

  答えは、「MD5」によるハッシュ化された文字列である。

 ちなみに、「$6$」から始まる場合は、「SHA-512」でハッシュ化された文字列である。これらのハッシュ化は、UNIX系OSのパスワード格納の際に使われているものである。下記は、「MD5」と「SHA-512」によってハッシュ化されたパスワードである。

[CENT OS 5.1 の /etc/shadow]

ntsuji:$1$DO0veTkq$STStxPpLTaS2Vzn2kvb13/:14631:0:99999:7:::

[Ubuntu 9.01 の /etc/shadow]

ntsuji:$6$FUXCOoWB$cmM/s/90Gu2LTUa3zgDGuRg  

Mmj7MlUEBrF.Co8RFnDQuPqU2xFa3JrI1Qqbf5AWFfFz

【注】Ubuntuのパスワードは実際には1行。ちなみに上記はJoeパスワードである。


 さて、この文字列を元の文字列に戻す作業が必要なるわけだが、ここでいったん、問題文に立ち返ろう。

 2つのなぞが何かということは判明した。次は「J」とは何であるかだ。

Copyright © ITmedia, Inc. All Rights Reserved.

Security & Trust 記事ランキング

  1. 「SQLite」のゼロデイ脆弱性、GoogleのAIエージェントが見つける AIは脆弱性調査の課題をどう解決したのか?
  2. 増える標的型ランサムウェア被害、現場支援から見えてきた実態と、脆弱性対応が「限界」の理由
  3. 日本人の約半数が「1年前より危険」と考えるオンライン詐欺とは マカフィーがホリデーショッピング詐欺に関して調査
  4. 「このままゼロトラストへ進んでいいの?」と迷う企業やこれから入門する企業も必見、ゼロトラストの本質、始め方/進め方が分かる無料の電子書籍
  5. 長続きする高度セキュリティ人材育成の秘訣を「第19回情報危機管理コンテスト」から探る
  6. Google Cloudがサイバーフィジカルシステムのレジリエンスを高める10の指標を解説 最初にすべきことは?
  7. AIチャットを全社活用している竹中工務店は生成AIの「ブレーキにはならない」インシデント対策を何からどう進めたのか
  8. 「ランサムウェアに一度感染したら、身代金を払ってもまた攻撃される」のはほぼ確実? ウィズセキュア調査
  9. ランサムウェア攻撃を受けた企業、約6割が「サプライチェーンのパートナー経由で影響を受けた」 OpenText調査
  10. Microsoftが注意喚起 「クイックアシスト」を悪用した「テクニカルサポート詐欺」の手口、対策とは
ページトップに戻る