Upgrade to Pro — share decks privately, control downloads, hide ads and more …

セキュリティ・キャンプミニ@26in東京 Bトラック応募課題

Avatar for BocchiMan BocchiMan
April 27, 2026
4

セキュリティ・キャンプミニ@26in東京 Bトラック応募課題

Avatar for BocchiMan

BocchiMan

April 27, 2026

Transcript

  1. 回答 ログに記録する情報 項目 内容 通信元IPアドレス アクセス元の特定 ユーザーID 誰がアクセスしたか 要求された注文ID 何にアクセスしたか

    ステータスコード アクセス結果 監視アラートの設計 権限外アクセスには 404 を返す実装を施し、情報を与えないようにする 同一IPから短時間に大量の404エラーが発生した場合にアラートを出す 連番 での不自然な連続アクセスが検出された場合でもアラートを出す 7
  2. 提出したコード import json from collections import Counter import sys def

    count_users(file_path): user_counts = Counter() with open(file_path, 'r', encoding='utf-8') as f: for line in f: # 1行ずつ読み込み(メモリ節約) try: data = json.loads(line.strip()) if 'user_id' in data: user_counts[data['user_id']] += 1 except json.JSONDecodeError: continue # 不正な行はスキップ for user, count in user_counts.items(): print(f"{user}: {count}") if __name__ == "__main__": if len(sys.argv) > 1: count_users(sys.argv[1]) else: print("Usage: python script.py <filepath>") 10
  3. 実装の際にした工夫 with open と for line in f ファイルを1行ずつ処理することで読み込みの際にメモリを圧迫しないようしました。 collections.Counter

     キーの初期化判定を省きました。 try-except JSONとして不正な行はスキップし、処理を継続できるようにしました。 11
  4. 3.対策案 カテ ゴリ 内容 検知 DNSログを分析し、単一クライアントからの異常なクエリ数、FQDNの長さや文字列を精査。特定 のレコードタイプへの偏りを閾値として設定して、怪しい通信を見つけ出します。 抑止 外部DNSサーバへの直接通信をFWで遮断し、必ず社内指定の再帰リゾルバを経由させる。その上 で、悪意のあるドメインへの名前解決自体をブロックします。

    運用 アラート発報時、直ちに該当する発信元クライアントを特定し、マルウェア感染・不審プロセス を調査するフローを回します。誤検知の場合はホワイトリストに追加して例外として学習させま す。 副作 用 プライバシーへの配慮とログの目的外利用の防止を念頭において、従業員が「いつ・どのWebサ イトを閲覧しているか」を把握するために全てのDNSクエリを監視する。 16
  5. 使用する単語: ・ スタブリゾルバ ・ 再帰リゾルバ(リカーシブリゾルバ) ・ 権威DNSサーバ ・ DNSクエリ ・

    DNSレスポンス ・ Aレコード(またはAAAAレコード) ・ TTL ・ TCP 3-way handshake ・ HTTP GETリクエスト DNSに詳しくなくても大丈夫です。 ポイントは「名前をIPに変える流れ」 「その後にHTTP通信が始まる流れ」を、あなたの言葉で筋道 立てて説明することです。 19
  6. 回答 ユーザーがブラウザにURL(例: http://example.com )を入力してからページが表示されるまで、 「名前解決」と「HTTP通信」の2つのフェーズが実行されます。 1. 名前解決のフェーズ  ブラウザがURLを受け取ると、OSに組み込まれたスタブリゾルバが、ドメイン名をIPアドレスに 変換するために、設定されている再帰リゾルバに対して「example.comのIPを教えて」というDNS クエリを送信します。

    再帰リゾルバは自身にキャッシュがない場合、ルートサーバーから順に権威DNSサーバへ反復的に 問い合わせを行い、対象ドメインのIPアドレス(例: 93.184.215.14)が記載されたAAAAレコードを 取得します。 その後、再帰リゾルバからスタブリゾルバへDNSレスポン スが返却されます。この際、応答データ にはTTL(例: 86400秒)と呼ばれる有効期間が設定されており、指定された時間内はキャッシュと して保持されます。これは、次回以降の高速化に役立ちます。 20
  7. 2. HTTP通信のフェーズ IPアドレスが判明すると、ブラウザはそのIPアドレスを持つWebサーバーに対して、通信の信頼性 を確保するためのTCP 3-way handshake(データの例: SYNパケット → SYN-ACKパケット →

    ACKパ ケット)を行い、接続を確立します。接続が確立された後、ブラウザはWebサーバーに対して 「GET / HTTP/1.1」のようなHTTP GETリクエストを送信し、サーバーから返されたHTMLなどのデ ータを解釈して画面にWebページを表示します。 21