2018年度の問題
2018年度に出題した問題です.
※ (注意!)脆弱性のあるプログラムなどが含まれます.無保証です.
取扱には十分に注意してください.十分に理解した上で利用してください.
インターネットに直接接続しているような状態でうかつに立ち上げたり
しないように注意!
- SECCON 2018 Online CTF (SECCON2018 オンライン予選) (2018年10月開催)
- Special Device File (OSの特殊デバイスファイル問題)
- Special Instruction (CPUの特殊命令問題)
- SECCON CTF 2018 -International- (国際) (2018年12月開催)
(!重要!)
本問題の目的は,セキュリティ啓発にあります.
不正な攻撃などを助長するものではありません.
- サーバ四 (CPUの特殊命令問題)
- チュートリアル
- サーバの動作パラメータの調整
- 更新インターバル (動的に反映されるためリブート不要)
- 以下のファイルで調整できる.(デフォルトは5分)
- /home/user/tmp/interval.txt
- runme.xの生成レベル (動的に反映されるためリブート不要)
- チームフラグが正常にコミットされると以下のファイルがカウントアップ
し,runme.xの生成レベルが上がり,またrunme.x生成に採用される
アーキテクチャ数が増える.(exec-sim/make.shとexec-sim/*.pl 参照)
- 手動で設定することで,生成レベルを強制書き換えできる.(初期値は0)
- /home/user/tmp/count.txt
- runme.xのstrip (動的に反映されるためリブート不要)
- サーバの各種制限
- サーバの接続元の制限
- gdb接続の,接続元の制限 (反映にはリブートが必要)
- /home/user/server/files/run.sh の以下の行の「any」を修正することで変更可能.
- 「any」ですべての接続可,「localhost」で自分自身からの接続のみ可,IPアドレス指定でそのIPアドレスに対する接続のみ可
$inetdc any $port 0 0 \
- チームフラグのコミット用ポートの,接続元の制限 (反映にはリブートが必要)
- サーバの各種リミット
- サーバの通信量リミット
- GDBの通信量リミット (動的に反映されるためリブート不要)
- クライアント→サーバへの通信量にリミットがあり,レジスタ値の
設定などが十分に行えない.(とくにV850)
- /home/user/tmp/size-connect.txt を修正することで変更可能.
(ファイル削除でリミット無し)
- デフォルトでは5000バイト
- (通常は修正不要)チームフラグのコミット用ポートの通信量リミット (動的に反映されるためリブート不要)
- /home/user/tmp/size.txt を修正することで変更可能.
(ファイル削除でリミット無し)
- デフォルトでは256バイト
- サーバの接続時間リミット
- GDBの接続時間リミット (反映にはリブートが必要)
- クライアント→サーバへの通信時間にリミットがあり,長時間の
接続ができない.
- /home/user/server/files/run.sh の以下の行を修正することで変更可能.
(デフォルトでは120秒)
limit=120
- 制限を気にしたくない場合は86400(24時間)などにする.
- (通常は修正不要)コミット用ポートの接続時間リミット (反映にはリブートが必要)
- 命令の実行回数リミット (動的に反映されるためリブート不要)
- 乱数命令の実行回数リミット (動的に反映されるためリブート不要)
- システムコールの実行リミット
- 安全のために,write()/exit()以外のシステムコールが
実行できないように制限している.またwrite()も標準出力に対してしか
行えないように制限している.
(デバッガ経由で操作され,不正にシステムコール発行されることの防止)
- パッチ上で SYSCALL_LIMIT でくくられた部分を参照.
(ハードコーディングしてあるので,動的に解除することはできない)
- 接続間隔の制限 (DoSを防ぐため,短期間での繰り返しの接続を制限している)
- iptablesによる制限 (反映にはリブートが必要)
- /etc/iptables/rules.v4 を修正する.
- ポート番号は--dportオプションで指定されている.
9999番ポートがチームフラグのコミット用ポート,
10000〜番ポートがgdb接続用ポートの設定なので,
それらの設定の行からhashlimitなどの定義を削除することで,
制限無しになる.(22番ポートの定義と同様にすればいい)
- gdb接続の,簡易inetdによる制限 (反映にはリブートが必要)
- /home/user/simple-inetd-connect/simple-inetd-connect.c の以下の行を修正し,makeしなおす
- デフォルトでは5秒.以下の定義を無効にすることで,制限無しになる.
#define CONNECT_LIMIT 5
- チームフラグのコミット用ポートの,簡易inetdによる制限 (反映にはリブートが必要)
- /home/user/simple-inetd/simple-inetd.c の以下の行を修正し,makeしなおす
- デフォルトでは10秒.以下の定義を無効にすることで,制限無しになる.
#define CONNECT_LIMIT 10