st98 の日記帳


[ctf][seccon] SECCON 2018 x CEDEC CHALLENGE に参加しました

チーム Harekaze で SECCON 2018 x CEDEC CHALLENGE に参加し、優勝しました。この記事では、どういった競技だったかという説明や、15 日間の競技期間中何をしていたかについて紹介したいと思います。

競技の概要

昨年は 15 日間で配布されたゲームの問題点を探して、その手法や対策案をプレゼンテーション資料としてまとめるという競技内容でした。今年は 3 つのフェーズに分割され、オンラインで開催される 5 日間の調査フェーズと 10 日間の対策フェーズ、そしてこれらを突破したチームが参加できるオンサイトの撃墜フェーズで競技が行われました。

調査フェーズは昨年の競技内容とほとんど同じで、各チームに apk ファイルが配布され、これに存在する問題点を探してプレゼンテーション資料に手法のみをまとめるというものでした。

対策フェーズは今年新しく追加されたもので、各チームに調査フェーズで使われたクライアントとサーバのソースコードが配布され、実際にチートやマクロへの対策を現実的な範囲で実装して、実装した対策をプレゼンテーション資料にまとめたものとソースコードを提出するというものでした。このフェーズでは他チームへの攻撃はできず、自チームのクライアントとサーバを堅牢にすることだけに集中できます。

撃墜フェーズは対策フェーズ同様今年新しく追加されたもので、各チームが対策フェーズで変更を加えたソースコードをビルドした apk ファイルが配布され、これをもとに問題点を指摘するというものでした。このフェーズでは自チームのクライアントやサーバに修正を加えられず、とにかく攻撃をすることになります。

発表資料

CEDEC 2018 での発表に用いた資料です。調査フェーズと対策フェーズで提出したものをほとんどそのまま使っています。

調査フェーズ

1 日目

2 日目

package com.example.st98.secconxcedec2018test;

import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.totem.keygenerator.KeyGenerator;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        KeyGenerator k = new KeyGenerator();
        new AlertDialog.Builder(MainActivity.this)
                .setTitle("title")
                .setMessage(toHex(k.generateKey()))
                .setPositiveButton("OK", null)
                .show();
    }

    public String toHex(String s) {
        StringBuilder res = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            res.append(Integer.toString(Integer.valueOf(s.charAt(i)), 16));
            res.append(" ");
        }
        return res.toString();
    }
 }

3 日目

4 日目

5 日目

調査フェーズの感想

対策フェーズ

1 日目

2 日目

3 日目

4 日目

5 日目

6 日目

7 日目

8 日目

9 日目

10 日目

対策フェーズの感想

撃墜フェーズ

撃墜フェーズの感想

まとめ

このエントリーをはてなブックマークに追加
st98.github.io / st98 の日記帳