Syskron Security CTF 2020 writeup
皆さん、こんにちは! Ken.Sです!
今回は、先程まで行われてたSyskron Security CTF 2020のwriteupです!最近のCTFはかなり難しいものが多いのですが、今回のCTFは問題数が多かったりtriviaという問題があったりで自身最高の6問解けました!(簡単なものしかないけど…)
結果
個人
解いた問題: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問題です。とりあえず、問題文を訳してみます。
「産業ネットワークの安全システムを標的とし、爆発による死亡事故を起こしたマルウェアは?」
ということで、「マルウェア 爆発 産業ネットワーク」とこんな風にググってみると…
「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より)
まあ、なんかの識別番号って感じですね。結局クレジットカード番号を調べて規定が分かりました。
1行目にご丁寧に書いてあります。とりあえず、これをflag formatで囲って提出して通りました。出した後に気付いたんですが、ちゃんと他二つもこの規定に従っていました。IMEI番号は上記のwikipediaのところから「チェックディジットの計算」とこれもまた分かりやすく書いてありました。UIC番号は少し難しかったのですが、下のwikipediaから、check digitの計算方法がLuhn algorithmで行っていることが分かります。このアルゴリズムのwikiに行くと同じ規定が出てきました。
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
解法
なんだこれ。そんな一言から始まりました。とりあえず、「ladder logic password」と調べましたが、良いサイトはヒットしません。そんなのありませんから…。
とりあえず、r1~10には0か1が入るみたいで1024通り考えられるのでbrute forceを防ぐために3回までしか試せないんですね。
与えられたpngファイルはラダー図と呼ばれるもので、回路設計の話です。詳しくは以下のサイトを…!
-||- みたいなのと、これに斜線が入ったもの、そして真ん中にRが入った3種類の接点が、黒と緑色に2種類あることが分かります。ではどういう風に考えたらいいかは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:
- How many employee records are in the file?
- Are there any employees that use the same password? (If true, send us the password for further investigation.)
- 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ってなんやねん、となったので調べてみました。
簡単に言うと、パスワードをデータベース内に保存する際にハッシュを取って保存することで、仮にデータベース内を見られてもパスワードがバレることはないという感じです。
以下のクエリでそんなパスワードがあるか確認します。
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
問題概要
得点: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」とググったら一発で正解しました…。悔しい。
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」でググったら以下のサイトが出たとのことです。
syskronCTF{Industroyer}
Security advisory
問題概要
分野:crypto
得点:400pt (16solves)
この問題はチームでも解けず…
問題ファイル
-
Senork published another security advisory. You have to review it (but maybe, there is some hidden information).
-
解法
最初はpdfだけ与えられて全く分からず…。ヒントを使ってpdfのメタデータに何かあるのだろうと見てみました。Acrobatで開いてファイル→プロパティで見れます。
アプリケーションが変な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見つけたら更新しますね。見つけたので紹介します。
足りなかったものは、メタデータのアプリケーションで得られた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は今回無いので…
6回もcorrect!と出ると非常に気持ちが良い!Ladder passwordは得点の割に難しくてsolves数も少なかったし、その分解けたというか予想が当たった時は嬉しかったですね!
それでは!
See you next time!