CLPWN見聞録

picoCTF2024 Reverse Engineering Writeups

編集中

picoCTF 2024 Reversing Writeups

WinAntiDbg0x100

WinAntiDbg系の問題はまとめて解説する

問題文

This challenge will introduce you to 'Anti-Debugging.' Malware developers don't like it when you attempt to debug their executable files because debugging these files reveals many of their secrets! That's why, they include a lot of code logic specifically designed to interfere with your debugging process. Now that you've understood the context, go ahead and debug this Windows executable! This challenge binary file is a Windows console application and you can start with running it using cmd on Windows.

アンチデバッグに関する問題らしい、題材がWindowsなのでPEファイルを解析する必要がある。

利用ツール

  • IDA
  • Ghidra
  • PPEE : PEファイルの表層解析をGUIでできる。動的にリンクされるライブラリなどの内容が見れる
  • WinDbgMicrosoftが提供するデバッガ

解説

PPEEでリンクされているライブラリを調べるとIsDebuggerPresentなる怪しい関数がリンクされているので、IDAでこの関数をCtrl+lで検索しデバッガを検出するルーチンを探し出す。

その周辺を調べると、フラグを出力するらしいブロックを発見できる。IsDebuggerPresentをコールした後test eax, eaxでeaxレジスタに0が入っているかどうか調べていることから、IsDebuggerPresentはデバッガを検出したときに1,そうでないときに0を返す関数だと推測できる。

デバッガ検出の方法が分かったので、ブレークポイントを仕掛けて返り値を上書きする。

ここで利用する『WinDbg』で利用するコマンド一覧を上げる。「Command」から?を入力することでヘルプを起動することもできる。(ファイルを起動するかプロセスにアタッチしないと使えないため注意)

  • g [addr]ブレークポイントに当たるまでプロセスを実行するコマンド。アドレスを指定してその場所まで実行させることもできる
  • bp addr :アドレスにブレークポイントを設定する
  • rレジスタの内容を表示する。レジスタの名前を指定して値を上書きすることもできる
  • lm:モジュール(ロードされているライブラリ等)の状態をみる

まず初めに適切な場所にブレークポイントを仕掛ける必要がある。IDA上でIsDebuggerPresentが呼び出される 0x4015fcにブレークポイントを仕掛けて実行しようとしても上手くいかないと思われる。
これはPEファイルのOptional HeaderにImageBaseと呼ばれるファイルがロードされると想定されるアドレスが記述されていて、IDAなどはそれをもとに命令コードのアドレスを決定するが、実際にプロセスを起動するときに、必ずしもそのアドレスにロードされるとは限らないからである。

Optinal HeaderのImageBase

つまり、ファイルを実行したときどのアドレスに読み込まれているかはその都度知る必要がある。lmコマンドを用いるとリンクされたライブラリ含め、どこに実行ファイルが読み込まれているか知ることができる。

ある命令コードのアドレスを求めるには、
(IDAでのアドレス) - ImageBase + (ロードされるアドレス)
以下、0x1000000に読み込まれたとする。

改めてIsDebuggerPresentをコールする場所(=0x10015fc)にブレークポイントを仕掛けると今度は上手くいく。Step Overで関数のコールを飛ばして、次のtest命令でeaxに0が入っているか確認するのでr eax=0でeaxに0を代入した状態で実行するとフラグを出力する

WinAntiDbg0x200

問題文

If you have solved WinAntiDbg0x100, you'll discover something new in this one. Debug the executable and find the flag! This challenge executable is a Windows console application, and you can start by running it using Command Prompt on Windows. This executable requires admin privileges. You might want to start Command Prompt or your debugger using the 'Run as administrator' option.

引き続きアンチデバッグに関する問題。管理者として実行しないと動作しない。

解説

WinAntiDbg0x100同様、IsDebuggerPresentが存在するのでバイナリ内でサーチするとデバッグ検出のルーチンを発見できる。すると今度はIsDebuggerPresentで検出する前にedxに0が入っているかどうかも調べているのでこの二つにブレークポイントを仕掛けてレジスタの内容を書き換える。

2ヶ所でレジスタの値を書き換えた後実行するとフラグが出力される。

WinAntiDbg0x300

問題文

This challenge is a little bit invasive. It will try to fight your debugger. With that in mind, debug the binary and get the flag! This challenge executable is a GUI application and it requires admin privileges. And remember, the flag might get corrupted if you mess up the process's state.

今度はGUIアプリケーションでデバッガをアタッチさせるのが目的らしい。

解説

いつものようにPPEEの表層解析を行うとSection Headersの中に「UPX」という文字列が見られるので、UPXでパッキングされていることが分かる。アンパックしたのち再びインポートされるライブラリ一覧を覗くと三度IsDebuggerPresentが現れるので同じ方法で検出ルーチンを探す。

おそらく、この方法では検出ルーチンを特定できなかったと思う。そこで手法を変え、デバッガをアタッチしようとしたときの挙動を調べてみる。
無理やりアタッチしようとすると「WinAntiDbg0x300」のウィンドウに勝利を告げるかの如くデバッガを検出した旨のテキストボックスが現れる。これを利用してやろう。

Our process detected the debugger and was able to fight it. Don't be surprised if the debugger crashed.

この文字列を検索すると。少し離れたところにフラグを出力するブロックを発見できる。

このフローの元をたどるとIDAのアドレスで0x4037c0で明らかに右に飛びそうにない条件分岐命令が見つかるのでJZ命令をJNZ命令にパッチして起動するとデバッガをアタッチする前にフラグが出る。

OS and distribution for Hacking

今までの経験から、ざっくりと知っているセキュリティでもペンテスト系に特化したOSやディストリビューションの簡単なまとめ。

調べたらよく出てくる3大ディストリビューション

Kali Linux

f:id:CLPWN:20220407150044p:plain
kali linux 2022.01
www.kali.org
とにかく多くの数のセキュリティ系ツールが含まれるハッカー定番ディストリビューション
沢山のセキュリティ系ツールが含まれたフルパッケージでのインストールもできるが、特定のツールではなく特定の分野や目的のためのパッケージ群のインストールができる。
Kali Linux Metapackages | Kali Linux Documentation
例えば、

# Webセキュリティ系のツールのインストール
$ sudo apt install -y kali-tools-web
# パスワードクラックツール
$ sudo apt install -y kali-tools-passwords
# フォレンジックツール
$ sudo apt install -y kali-tools-forensics

Parrot OS

f:id:CLPWN:20220407144145p:plain
parrot_security5.0

www.parrotsec.org
Office系のツールやマルチメディア系のツールが入っており、普段使いもできそうなセキュリティ系ディストリビューション。Torであったり匿名ツールもデフォルトで入っている。
セキュリティ系ツールも多いが、その他ユーティリティ系ツールも豊富なのでセキュリティしつつ多様な使い方ができる。セキュリティ系ツールの数はKali linuxよりも少ないかもしれないが、種類は多いような気がする。

Black Arch

f:id:CLPWN:20220407162220p:plain
blackarch-linux-2021.09.01

blackarch.org
見た目はザ・ハッカーという風でありカッコいいがとても簡素で、多くのツールそれらのツールの使用目的が分かっていてすぐに使える環境が欲しいというのならば良いです。
不親切な設計ではあるがUIは最低限で良いがGUIが良いという人向けかと。

個人的に好きなもの

Slingshot Linux C2 Matrix

f:id:CLPWN:20220407165004p:plain
SlingshotC2-2021.11.03

www.sans.org
GitHub - sansinstitute/slingshot: SANS Slingshot Linux Distribution
Slingshot Linuxには最低限のよく使われるセキュリティ系のツールが入っている。さらに、C2 MatrixバージョンにはCommand and Controlに使われるような攻撃のための総合的なツールが含まれている。
The C2 Matrix - C2 Matrix
このC2ツール群を試すのは環境の準備に少し手間がかかるが、目的にあったツールを組み合わせる以外で実際に攻撃を行う攻撃者のマインドに触れられるので学べることが多いハズだ。
個人的にはEmpireを試すことがおススメ。

Ninjutu OS

f:id:CLPWN:20220407174353p:plain
NinjutuOSv1.0

ninjutsu-blog.github.io
windowsベースのセキュリティ系OS。最小要件は55GB、色々と使い勝手の悪いところがあるがWindows環境でのセキュリティ系ツールは何があるのかという学びにはなる。
まだまだ開発中なので、使い続けるのは辛い状況。

結局おススメは?

一番は...

一番は、Kali linuxがそれ自体の様々なバリエーションや資料の多さ、扱いやすさからおススメ。セキュリティを学ぶ上で、少なくとも日本では最も多く知られており使われている。
日本語でも、書籍、資料が多くあるため、触れやすく学びやすい。
ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習(IPUSIRON)|翔泳社の本
ただ、セキュリティ以外にも普段使いや匿名化を気にするのであればparrotでも良い。

もう少し詳しくなったら...

Kaliであったり、ディストリビューションに含まれるツールは最新版のものでは無い。また、セキュリティ系ツールが沢山あっても実際に全てを使う訳ではないだろうし、ほとんどの場合は持て余してしまう。
そうなると、慣れてきたらセキュリティ系のディストリビューションは良さそうなツールを探すツールみたいなもので、普段使いはUbuntuが良い。
自分で入れた方が依存関係であったり他の様々な学びを得て、何を何に使うのかを意識してツールの目的と用途を実感できる。
何故Ubuntuなのかと言うと、セキュリティ系ツールはKali以外だとUbuntuがサポートOSとしてリストされていることが多いからだ。Ubuntu使っている人は多い。

終わり

始めはKaliかParrotで始めて、Ubuntuにしてみると良いと思います。

ランサムウェアグループのContiをご存じですか

ランサムウェアグループ Conti

ランサムウェアを作って攻撃を行う上で、RaaS(ransomware-as-a-service)としての一面もあり、Contiのインフラを借りて攻撃を仕掛けることができるというサービスを提供している。

Contiランサムウェアギャングの概要

まるで一つの企業

また、このグループは一つのIT企業のように動いているという情報がある。具体的には、

  • 主な事業グループとしてプログラマー、テスター、システム管理者、リバースエンジニア、攻撃チーム、交渉スタッフ
  • ロシアの物理的なオフィスで働いている
  • 毎月のボーナス、罰金、今月の従業員、業績評価がある
  • 採用活動を行っている

所属する人の中にはサイバー犯罪に関わっていることも知らない人もいるとのこと。

ロシア政府との関係

このグループがロシア支持を表明した後に、内部からのリークであるのかグループのチャットが流出している。実際の中身を見た訳ではないためにはっきりとは分からないが、ロシア政府との関係とも言われている。
ロシアのウクライナ侵攻支持を宣言したContiランサムウェアグループの内部チャットがネットに流出 | TechCrunch Japan
ランサムウェア集団「Conti」の情報流出から見えた、ロシア政府との関係 | WIRED.jp

ソースコードの流出

3/20にcontiの開発に使われるソースコードと言われるものがVirusTotalで公開された。
https://twitter.com/ContiLeaks/status/1505433648023146499
7zでパスワードが必要だが、次に続くツイートがパスワードだと言われている。VirusTotalからダウンロードするのは有料会員としての登録が必要だが、単純に登録してお金を払えば良いというものではないために試していない。

Contiの詳細

もし興味があれば、Contiのランサムウェア一例の解析結果CISA(米国国土安全保障省サイバーセキュリティー・インフラセキュリティー庁 Cybersecurity & Infrastructure Security Agency)によるContiのまとめが公開されているため確認をおススメする。

by 4ensiX=Zarat

私が今からサイバーセキュリティの勉強を始めるなら

ふと、ここまでのサイバーセキュリティの旅路を振り返って、ゼロからスタートするならばどのように進めて行きそうかを文章にしてみようと思った次第。
あくまでも個人の考えなので温かい目で見てください。

プロローグ ~パソコンよく分からないけれど、興味ある~

ゼロからと言ったのでゼロから検討しましょう。
「そもそもパソコンよく分からん」の状態から始めるなら何に触れるのが良いのかは、真面目に考えたことが無い。
とりあえず、パソコンをよく使うようにしてパソコン関連で何か困ったことがあったら、自分で解決しようとしてみるというところだろうか。
それがあってるか分からないなら、こういうアプローチをしたらどうなるっていうのを詳しい人に具体的に聞いてみて、そこから学んでいくというようなものですかね。
知識面?IT入門ならITパスポートですかね。
【ITパスポート試験】情報処理推進機構
何となくIT分かってきたになってきたなら、ハーバード大学コンピュータサイエンス入門コースも良いかもしれませんね。
CS50 for Japanese: コンピュータサイエンスの入門 – 当ウェブサイトは、Creative Commons ライセンスに基づいて管理されています。
また、ITの最新情報や良い情報は英語の方が多いので英語に触れていきましょう。
実際、高校までの英語である程度読めるので難しくは無いです。
ITで分からないことは英語で調べてみたり英語に触れていれば、そのうち英語でも気にならなくなる。

第一章 プログラミングを始める

プログラミングが必要であるし、セキュリティをやるにはサービスのどこに脆弱性ができそうか、自分の好きなことができるツールを作りたいときに絶対必要ですね。
学ぶ方法は人それぞれだと思うのでお好みで。
Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]
ドットインストール - 3分動画でマスターできるプログラミング学習サービス
環境構築不要!初心者でも楽しく学習できるプログラミング入門サービス【paizaラーニング】
さて、プログラミング言語は何を学べば良いんでしょうか。ここから先は大いに個人的な考えが入る訳ですが、C言語Pythonですかね。
C言語なんて遅れてるよって言う人もいますけど、やはり色々なものの基になってる言語であるしコンピュータの動作原理であったり低いレイヤに触れようとするほど必要になる。そして、これを学んでおけば他の大抵の言語の理解は直ぐに進む気がするので。
Pythonは流行りというのもあって色々なものがPythonで書かれているのでやっとくべきですけど、セキュリティを関連のツールであったり脆弱性を試すためのコード(エクスプロイトコード)であったりはPython 2で書かれていることが多いので、実際2と3どっち勉強すれば良いのかと言われてしまうと迷うところです。Python 2は公式サポートが終了したというのがありますが、Python 3が分かっていればPython 2も大体分かるので大丈夫ですよ。JavaJavascriptくらい違うなんてことは無いのですよ。
Learn Python - Free Interactive Python Tutorial
総合目次 - 苦しんで覚えるC言語 [MMGames]
ちなみに何を作ってみれば良いと聞かれると、色々な変換ツールだったりネットワークプログラミングですかね。
おすすめは、C言語なら
O'Reilly Japan - Hacking:美しき策謀 第2版
Pythonなら(Python2です)
O'Reilly Japan - サイバーセキュリティプログラミング
セキュアなプログラミングを学ぶならIPAですかね。
IPA セキュア・プログラミング講座:IPA 独立行政法人 情報処理推進機構

知識面でなら、次は基本情報技術者試験でも取ってみますか。
www.jitec.ipa.go.jp
もし、英語でも良いならばサイバーセキュリティで有名なSANSの動画もおすすめです。
Streaming Tutorials | Cyber Aces | Free online cybersecurity courses

第二章 始めましてサイバーセキュリティ

今、サイバーセキュリティを学び始めるなら最もおススメするのはTryHackMeです。
TryHackMe | Cyber Security Training
THM(TryHackMe)は、マシンにアクセスして手を動かし聞かれた問題に答えながらサイバーセキュリティを学ぶことができます。無料でもある程度できますが思いきって課金して楽しんで欲しいです。1万円/年くらいです。
登録したならば、Learning PathsにあるPre SecurityとComplete Beginnerに取り組みましょう。知識を振り返りつつ、セキュリティを実践的に学べます。

第X章 セキュリティつよつよを目指して

ここまで来ると割とセキュリティ分かってきたと思います。ここからセキュリティつよつよになるには2種類の学習方法があると思います。
1つ目はCTFに取り組むこと、2つ目は自分の好きなスキルを伸ばしていく方法です。

CTFでつよつよを目指す

CTFは与えられた課題に取り組み、特定の文字列を探す、その中で様々なセキュリティ関連のITスキルが試されるものです。
決められた期間内でスコアを競うものが毎週のようにやっているので参加してみましょう。
CTFtime.org / All about CTF (Capture The Flag)
また、常にCTF形式で様々なジャンル問題を配信しているサービスも沢山あるので、そちらも要チェックです。
GitHub - zardus/wargame-nexus: A sorted and updated list of security wargame sites.
CTFで使われるようなツール集も添えて
GitHub - zardus/ctf-tools: Some setup scripts for security research tools.

自分の好きなスキルを伸ばしてつよつよになる

ここまで来ると、サイバーセキュリティの中でも自分の好きな分野が見つかりそれを突き詰めていきたいという場合もあるでしょう。
例えば、脆弱性診断やペネトレーションテストといった攻撃面、セキュリティ脅威に対する検知や解析といった防御分野、Webセキュリティを突き詰めたいといったパターンです。それぞれの分野に専用の学習サービスがあるはずなので、興味があれば調べてみましょう。具体的には次のようなサービスがあります。

攻撃面(Red Team)

脆弱性診断やペネトレーションテスト系は、Penetration TestingやSecurity Red Teamと調べると出てきます。
おススメは、THM(TryHackMe),HTB(HackTheBox),Vulnhubです。
TryHackMe | Cyber Security Training
Hack The Box: Hacking Training For The Best | Individuals & Companies
Vulnerable By Design ~ VulnHub

防御分野(Blue Team)

防御系はBlue TeamやDFIR(Digital Forensics & Incident Response)で調べてください。
おススメは、LetsDefend,CyberDefenders: Blueteam Training,Blue Team Labs Onlineです。
LetsDefend - Blue Team Training Platform
CyberDefenders: Blueteam Training
Blue Team Labs Online - Cyber Range

Webセキュリティ

Webセキュリティのスキルアップには、Web系のCTFに取り組みつつバグバウンティを行っていきましょう。

HackerOne | Hacker-Powered Security, Bug Bounties, and Pentests
Bugcrowd
Intigriti - Bug Bounty & Agile Pentesting Platform

終わり

全ての分野に詳しくなっても良し、自分の好きな分野を見つけて突き詰めていくも良し、サイバーセキュリティには様々な分野があるので是非好きな分野を見つけていただきたいです。
by 4ensiX=Zarat

2020年度 高レイヤ最初の記録


活動記録を付けようと始めたのはいいものの、気づいたら年を越して、年度を越して、モーリーファンタジーも越えてというようなことになってしまっている。
これは遺憾なので、今日からは活動記録を残していくことにする。

今年度の高レイヤの目標

バグバウンティできるくらいになれば、CTFも余裕のハズだから、バグバウンティできるようになる。

年度計画

夏休み前くらいまでに、web言語関連の基本学習を一通り終える。
同時に徳丸本やwebのonline challengeでwebinerになっていく。

web言語学 web online challenge web知識本
4月 javascript 色々 徳丸本
5月  ↓ SQL 色々
6月  php ↓ 色々
7月   ↓   色々
8月 ? 色々 web application hacker handbook?
9月 ? 色々
10月 ? 色々
11月 ? 色々
12月 ? 色々
1月 ? 色々
2月 ? 色々
3月 ? 色々

現在までの進捗

4/13の勉強会進捗

  • javascript勉強会 N予備校 にて、 「2020年度プログラミング入門 Webアプリ」の第一章 の14まで終了
  • 徳丸本websecuriy勉強会 徳丸本を始めるための環境構築を終えた。 環境構築で行ったことは、徳丸本サイトからDL可能な「wasbook.ova」でVMを立て、OWASP ZAP をインストール(要JRE)しlocalproxyを58888に変更、FirefoxとここにアドオンのFoxy-proxyの導入、wasbookのVMのwebページにリンクがあるfoxyproxy.jsonをFoxy-proxyにimportを行った。

    4/16の勉強会進捗

  • javascript勉強会 N予備校 にて、 「2020年度プログラミング入門 Webアプリ」の第一章 終了
  • OverTheWire:Natus Lv0~10を完了

    4/20の勉強会進捗

  • javascript勉強会 N予備校 にて、 「2020年度プログラミング入門 Webアプリ」の第二章 まで終了
  • 徳丸本websecuriy勉強会 徳丸本p57まで終了

    4/23の勉強会進捗

  • javascript勉強会 N予備校 にて、 「2020年度プログラミング入門 Webアプリ」の第二章 まで終了、node.jsの用意をしていなかったので、javascriptの付録に飛び「chrome拡張機能づくり」の途中。
  • websec_challenge XSS game 終了。

    今後の予定

  • javascriptは残り3週ほどでけりを付けたい

2019/09/?? 一年生勉強会<OSI参照モデル編>

こんにちは。 セキュリティ関係の学習を目的としたチームCLPWN(※クラウン)です。

夏休み中、CLPWN内では一年生に対して勉強会を行いました。

今回はその第二回として、OSI参照モデルTCP/IP階層モデルについて紹介、説明しました。

主にOSI参照モデルについて説明したうえで、 TCP/IP階層モデルについて説明しました。 それぞれの階層での有名なプロトコルを一通り紹介して、まず存在を知ってもらうことに重きを置きました。

またIPアドレスについて掘り下げました。 アドレスクラスやサブネットマスクIPv4IPv6 などについて触れました。

感想

発表者の自分としては、今回の内容について授業で深く理解したところがありました。 今回一年生に発表を行うために再び調べる事となり、ネットワークの復習をすることができたのでよかったと思う。

担当者grape

勉強会始めました!

CLPWNでは日々勉強会を行ってます 

 

今回は、9月中に行われたLinuxコマンドの勉強会の活動記録となります。

参加者は、CLPWNメンバー9人ほどです。

 

今回の勉強の内容としては、

Linuxディストリビューション

2各種Linuxコマンドの説明と実演

相対パス絶対パス

4権限について

 

個人的にコマンドは使いながら覚えていくのが良いと考えているので、説明と実演は飛ばし気味でやりました。これからコマンドを使う際の参考になればと思います。

 

ではまた!!!ボシュε=ε=((っ・ω・)っ