Attack All Around

今やCTFと競プロばかりだが、トビタテ生のアメリカ留学やTOEFL奮闘記

Syskron Security CTF 2020 writeup

皆さん、こんにちは! Ken.Sです!

 

今回は、先程まで行われてたSyskron Security CTF 2020のwriteupです!最近のCTFはかなり難しいものが多いのですが、今回のCTFは問題数が多かったりtriviaという問題があったりで自身最高の6問解けました!(簡単なものしかないけど…)

 

ctf2020.syskron-security.com

 

 

結果

個人

解いた問題:6問

得点:395pt (20-25*3-100-200) ヒントで50pt使ったのでスコア上では345pt

 

m1z0r3

解いた問題:14問

得点:1500pt

順位:122th

 

Welcome letter

問題概要

分野:reading

得点:20pt (888 solves)

 

問題ファイル

  • welcome-letter.pdf

 

解法

pdf内上部にflagがある。

 

syskronCTF{th4nk-you}

 

 

Deadly malware

問題概要

分野:trivia (malware)

得点:25pt (645 solves)

 

問題文

Which malware targets safety systems of industrial networks and caused deaths due to explosion?

Flag format: syskronCTF{name-of-the-malware}

 

解法

初めて挑むtrivia問題です。とりあえず、問題文を訳してみます。

「産業ネットワークの安全システムを標的とし、爆発による死亡事故を起こしたマルウェアは?」

ということで、「マルウェア 爆発 産業ネットワーク」とこんな風にググってみると…

 

wired.jp

 

triton」っていうマルウェアが出てきました。爆発事故が起こったかどうかこの記事からは分かりませんが、調べてみると2009, 2010年にイラン国内の核燃料施設でウラン濃縮用遠心分離機を破壊したらしいです。wikiを見ても危なっかしい文章が並んでます。怖い。

 

syskronCTF{Triton}

 

 

Security framework

問題概要

分野:trivia (framework, standard)

得点:25pt (538 solves)

 

問題文

In 2018, the NIST published version 1.1 of their Cybersecurity Framework. What are the abbreviated names of the five core functions?

Flag format: syskronCTF{F1-F2-F3-F4-F5} (e.g., syskronCTF{AB-CD-EF-GH-IJ})

 

解法

「2018年、NISTは「Cybersecurity Framework」のバージョン1.1を発表しました。5つのコア機能の略称は?」

ということで、「Cybersecurity Framework version 1.1」とググります。そしたら以下のpdfを頂きました。

 

https://www.ipa.go.jp/files/000071204.pdf

 

p24 2.1 Framework Core で分かりやすい5個の略称が書いてあります。Flag formatからも問題ないでしょう。

 

syskronCTF{ID-PR-DE-RS-RC}

 

これって、5!通りのflagでも通るのでしょうか…。

 

 

Check digit

問題概要

分野:trivia (standard)

得点:25pt (487 solves)

 

問題文

We need a check digit in our keys. What do IMEI numbers, credit card numbers and UIC wagon numbers have in common?

Flag format: syskronCTF{relevant-ISO/IEC-standard} (e.g., syskronCTF{ISO/IEC-27001}).

 

解法

「鍵にチェックデジットが必要なんです IMEI番号、クレジットカード番号、UICワゴン番号の共通点は?」

 

知らない番号が二つ出てきました。

 

IMEI番号について (wikipediaより)

International Mobile Equipment Identity - Wikipedia

全ての携帯電話や一部の衛星電話に付与される識別番号。携帯電話のバッテリを外すと、そこに書いてあることが多い。また、*#06# と入力すれば携帯電話の画面にも表示できる。

 

UICワゴン番号について (wikipediaより)

客車のUIC分類記号 - Wikipedia

国際鉄道連合 (UIC) が開発した鉄道客車を分類する記号の国際的な体系について説明する。

 

まあ、なんかの識別番号って感じですね。結局クレジットカード番号を調べて規定が分かりました。

 

クレジットカードの番号 - Wikipedia

 

1行目にご丁寧に書いてあります。とりあえず、これをflag formatで囲って提出して通りました。出した後に気付いたんですが、ちゃんと他二つもこの規定に従っていました。IMEI番号は上記のwikipediaのところから「チェックディジットの計算」とこれもまた分かりやすく書いてありました。UIC番号は少し難しかったのですが、下のwikipediaから、check digitの計算方法がLuhn algorithmで行っていることが分かります。このアルゴリズムwikiに行くと同じ規定が出てきました。

 

UIC wagon numbers - Wikipedia

Luhn algorithm - Wikipedia

 

 

syskronCTF{ISO/IEC-7812}

 

 

Ladder password

問題概要

分野:plc-programming

得点:100pt (141 solves)

 

問題ファイル

  • 「A BB engineer encoded her password in ladder logic. Each "r" can be either 0 or 1 and represents a character in her password. "r1" is the first character, "r2" the second one, and so on. We assume that n1 is a small value and n3 is big. n2 may be between n1 and n3.

    Please decode the password to demonstrate that this technique of storing passwords is insecure.

    Flag format: r1r2r3…r9r10 (e.g., 1101…001).

    Be aware: BB deployed brute-force detection. You only have 3 attempts until lockout!

  • ladder-password.png

f:id:partender810:20201025154043p:plain

ladder-password.ong

解法

なんだこれ。そんな一言から始まりました。とりあえず、「ladder logic password」と調べましたが、良いサイトはヒットしません。そんなのありませんから…。

とりあえず、r1~10には0か1が入るみたいで1024通り考えられるのでbrute forceを防ぐために3回までしか試せないんですね。

 

与えられたpngファイルはラダー図と呼ばれるもので、回路設計の話です。詳しくは以下のサイトを…!

elec-tech.info

 

 

-||- みたいなのと、これに斜線が入ったもの、そして真ん中にRが入った3種類の接点が、黒と緑色に2種類あることが分かります。ではどういう風に考えたらいいかはwikipediaを参考にしました。

 

ラダー・ロジック - Wikipedia

 

基本は直列回路がANDで並列回路がORという感じでb1~b10がリテラル(0か1)となって、その結果がr1~r10に格納されるというイメージを持ちました。

-||(b1)--|\|(b2)-(r1) という場合は r1 = b1 and not b2, つまりb1=1かつb2=0ならr1=1, そうでないならr1=0という意味になります。

 

途中に出てくる値n1~3は問題文にあるようにn1<n2<n3という関係です。n2 is between n1 and n3. とありますが、これってn1 <= n2 <= n3という意味にもなるのでしょうか…。四角で囲われて上から順に[< n1, n2] とあれば n1 < n2 なら1, そうでないなら0となります。なので、後はb1~b10を2^10=1024通り全て試してr1~10の取り得る値を調べていこうと思いました。その結果答えが3通り以下に絞られるから3回まで試せるのかなと思っていました。

これを計算するプログラムを作る前に思い返したのですが、接点の種類は分かっても色の違いが分かりません。緑色がなんとなく蛍光色に見えたので、もしかして緑色は電気が通って黒は通らないのでは?とふと思いました。r1,r2で言うと

r1 = 黒 and 緑 and 緑 = 0, r2 = (n1 = n2は偽) and 緑 and 黒 = 0

といった感じです。r10まで求めると、0011100011となり提出したら通りました!

え、これで通ったの?と少し拍子抜けしましたが、まだ10 solves程度と時に解けたのは嬉しかったです!

 

後から調べてみたのですが、-|R|-は制御回路?らしきもので片方がtrueならもう片方はfalseになるような感じみたいです。間違ってたらごめんなさい…。また、「b1~b10を2^10=1024通り全て試してr1~10の取り得る値を調べ」ましたが26通りありました。この色の違いに気付かないといけないみたいですね。

 

0011100011

 

 

 

Leak audit

問題概要

分野:sql

得点:200pt (391 solves)

 

問題ファイル

  • We found an old dump of our employee database on the dark net! Please check the database and send us the requested information:

    1. How many employee records are in the file?
    2. Are there any employees that use the same password? (If true, send us the password for further investigation.)
    3. In 2017, we switched to bcrypt to securely store the passwords. How many records are protected with bcrypt?

    Flag format: answer1_answer2_answer3 (e.g., 1000_passw0rd_987).

  • Hint : Knowing SQL doesn't hurt.
  • BB-inDu57rY-P0W3R-L34k3r2.db

 

解法

SQLを知っている人はこの問題ササっと解けます。ヒントは役に立たないですね…SQL使わない解法は、まあ全部表示して手で数えるとかかな…。

 

1.How many employee records are in the file? (ファイルに何人の従業員が記載されていますか?)

table名を確認してCOUNTすればOKです。

 

sqlite> .tables
personal
sqlite> SELECT COUNT(*) FROM personal;
376

 

 

2.Are there any employees that use the same password? (If true, send us the password for further investigation.) (同じパスワードを使っている従業員はいますか?いたらそのパスワードを教えて)

まあ、flag formatからいるんでしょうね。

 

SQL初心者なのでググって調べました。

重複したデータを抽出する|プログラムメモ

 

sqlite> SELECT password FROM personal GROUP BY password HAVING COUNT(password) > 1;
mah6geiVoo

 

 

3.In 2017, we switched to bcrypt to securely store the passwords. How many records are protected with bcrypt? (2017年にbcryptでセキュアにパスワードを管理するようにしたけど、そうしている従業員は何人いる?)

 

bcryptってなんやねん、となったので調べてみました。

bcrypt - Wikipedia

 

簡単に言うと、パスワードをデータベース内に保存する際にハッシュを取って保存することで、仮にデータベース内を見られてもパスワードがバレることはないという感じです。

以下のクエリでそんなパスワードがあるか確認します。

 

sqlite> SELECT password FROM personal ORDER BY password;
$2b$10$/dd1tLbClIU85/pkthZvee9NvDvOYADy6/iSXGIEQxSVAhvRSASj6
$2b$10$1YdjEQ97.itIoDM3WQLBZORGQJuekq6OYFwaB6actkNzJZyU3ZFUy
$2b$10$5VRLne6dbC.qgBrnj9AFTeXpWn6Hkiv2UIUepqCChNOE2YmMCp5qm

 

ORDER BYでアルファベット順にしたら固まって出てきました。wikiにあるように$2b$という列から始まりました。

 

あとはそんな文字列から始まるpasswordをクエリでCOUNTします。

 

sqlite> SELECT COUNT(password) FROM personal WHERE password LIKE "$2b$%";
21

 

よって、flagは以下の通りです。

 

376_mah6geiVoo_21

 

 

 

 

ここまでは自力で解けました。以降は自力では解けなかったものを紹介します(チームで解けたり解けなかったり)

 

解けなかった問題

Vulnerable RTOS

問題概要

 分野:vulnerability

得点:25pt (708 solves)

 

問題文

What are the names of 11 zero-day vulnerabilities that affect a wide range of real-time operating systems?

Flag format: syskronCTF{name-of-the-vulnerability}

 

解法

 「広範囲のリアルタイムOSに影響を与える11のゼロデイ脆弱性の名前は?」とあるので、「11 zeroday」とググったら以下のサイトを発見! しかし、脆弱性の名前などは出てこず…

FireEye、2013年に11件のゼロデイ攻撃を検出 | FireEye

 

チームメイトが「11個 ゼロデイ リアルタイムOS」とググったら一発で正解しました…。悔しい。

monoist.atmarkit.co.jp

 

syskronCTF{URGENT/11} 

 

 

DoS Attack

問題概要

分野:packet-analysis

得点:100pt (340 solves)

 

問題ファイル
  • 「One customer of Senork Vertriebs GmbH reports that some older Siemens devices repeatedly crash. We looked into it and it seems that there is some malicious network traffic that triggers a DoS condition. Can you please identify the malware used in the DoS attack? We attached the relevant network traffic.

    Flag format: syskronCTF{name-of-the-malware}」 

  • dos-attack.pcap

 

 

解法

パケットを見て何のマルウェアか特定する問題です。

パケット調べると毎回60バイトでDNSプロトコルで1024回送っています。DNSを介してのDDoS攻撃だからDNSリフレクター攻撃かと思ったが、マルウェアを特定できない…。 DNSクエリなのにドメイン名が無いということも教えてもらいました(こういった基礎知識の無さが滲み出た)。

結果として、ヒントを使いました。

 

They bought some older SIPROTEC 4 protection relays.

 

とりあえず、「SIPROTEC」でググると「siemens」というドイツの企業が出てきました。私はここから動けなかったのですが、チームメイト曰く「SIPROTEC siemens malware」とググったら「CVE-2015-5374」という脆弱性が出てきて、「malware CVE-2015-5374」でググったら以下のサイトが出たとのことです。

eset-info.canon-its.jp

 

 

syskronCTF{Industroyer}

 

Security advisory

問題概要

分野:crypto

得点:400pt (16solves)

この問題はチームでも解けず…

 

問題ファイル
  • Senork published another security advisory. You have to review it (but maybe, there is some hidden information).

    https://www.senork.de/files/BSA-2020-11.pdf

  •  

    Hint : Sometimes, metadata exposes sensitive information. 

 

解法

最初はpdfだけ与えられて全く分からず…。ヒントを使ってpdfのメタデータに何かあるのだろうと見てみました。Acrobatで開いてファイル→プロパティで見れます。

 

f:id:partender810:20201025192342p:plain

メタデータ

 

アプリケーションが変な16進数ですね。とりあえず、long_to_bytesしてみました。

 

b'damn metadata; here you go: 2ZdkKTtprGGddHh33' 

 

 

うおお!文字になった!

けど、2Z~33をsyskronCTF{}で囲ってもIncorrectでした…。まあこれじゃcrypto要素ゼロですもんね。pdfはBlowfish暗号について書いているので調べてみました。Leak auditでのbcryptと同じ方式らしいです。そして、pdf内の「Technical description of the vulnerabilities」に16進数12桁が8個ありました。Blowfish暗号はブロック暗号だからこれが暗号文か!?とか思いましたが、復号できず…。OFBモードとか書いてあるなとか思いつつ、ここでタイムアップでした。

 

writeup見つけたら更新しますね。見つけたので紹介します。

 

ctftime.org

 

足りなかったものは、メタデータのアプリケーションで得られた2Z~33の文字列が16bytesだったということに気付くところと、Cyberchefと友達になれなかったところです。

2Z~33の文字列をhexに直して前半16桁をkey, 後半をivとします。あとはpdf内の16進数を全て繋げたものを暗号文として、Blowfishのdecryptを行うとflagが手に入ります。

 

7,8割は出来てたのになぁ…悔しい!!!

 

syskronCTF{you-Just-anaLyzed-your-1st-advisorY}

 

 

 

 

 

問題ファイルはGitHubに載せてます。solverは今回無いので…

github.com

 

6回もcorrect!と出ると非常に気持ちが良い!Ladder passwordは得点の割に難しくてsolves数も少なかったし、その分解けたというか予想が当たった時は嬉しかったですね!

 

それでは!

 

See you next time!