03 / 05 · 2022.08 — 2023.07
浙江木鏈科技有限公司
産業制御セキュリティ分野での Python バックエンド。バイパス型トラフィック監査システムのトラフィック処理経路、ホワイトリスト検知エンジン、Django REST API に参画し、Suricata によるブラックリスト検知を統合。27 種の産業プロトコルの詳細解析に対応した。
- 職種
- Python 開発エンジニア
- 業種
- 産業制御セキュリティ
- 所在地
- 浙江
- チーム
- 13名
- 在籍
- 1年
主な成果
27 種
詳細解析する産業プロトコル:Modbus、S7COMM、IEC104、IEC61850、DNP3、OPC UA、PROFINET、BACnet など
996 件
Suricata に取り込んだ産業系脆弱性シグネチャ(ブラックリスト検知用)
10 秒
Redis の有効期限イベントで実現したフロー集約窓。パケット単位の書き込みをフロー単位に
この会社での案件
PROJECTS · 12022.08 – 2023.07 · Python バックエンド開発 · 体制 13名
産業制御セキュリティ監査プラットフォーム
電力・製造などの制御システム向けのバイパス型トラフィック監査システム。プローブがスイッチのミラートラフィックを取得し、Kafka を経由して Cython 製のプロトコル解析エンジンへ。資産・ホワイトリスト・ブラックリストの 3 層ポリシーで検知・通知する。Modbus、S7COMM、IEC104、IEC61850、DNP3、OPC UA/DA/AE、PROFINET、ENIP/CIP、BACnet など 27 種の産業プロトコルを詳細解析し、電力系研究機関などの案件で稼働。
- トラフィック処理経路の開発に参画:キャプチャプローブ → Kafka → プロトコル解析エンジン → PostgreSQL。Redis の有効期限イベントで 10 秒窓のフロー集約と一括登録を実現し、DB 書き込み負荷を大幅に低減。Redis の TTL で機器のオフライン検知を実装
- 5 タプル・MAC・プロトコルのファンクションコードに基づくホワイトリスト検知エンジンを実装し、ビットマップで「通信行動の異常」と「内容の異常」を区別。IEC104 ASDU や OPC のインターフェース/ファンクションコードまで踏み込んだルール照合、時間帯指定でのホワイトリスト自動学習にも対応
- 資産管理、ホワイト/ブラックリストポリシー、アラート、レポートなどの Django REST API を担当。Celery Beat でレポート出力、ポリシーバックアップ、期限切れデータの削除、プローブのヘルスチェックなどの定期ジョブを実装
- Suricata を組み込み、unified2 アラートを解析。約 1,000 件(996 件)の産業系脆弱性シグネチャでブラックリスト検知を実現
- Kafka Connect(Debezium CDC)で Pilosa のビットマップインデックスへデータ同期し、トラフィック統計と多次元検索を支援
- (カスタム版)IEC 61850 の SCD ファイルを解析し、変電所の IED 通信ベースラインとトポロジを自動生成
- Python
- Django / DRF
- Celery
- Kafka
- Redis
- PostgreSQL
- Pilosa
- Suricata
- Cython
- Vue 2
システム構成
システムデータフロー
抽象的な図示・内部の詳細は含みませんスイッチのミラーポート
バイパス・読み取り専用
キャプチャプローブ → Kafka
Scapy・raw_packets 300GB 保持
プロトコル解析エンジン
Cython・27 種の産業プロトコル
ポリシー検知
資産・ホワイトリスト(ビットマップ)・Suricata ブラックリスト
▲ 担当範囲
PostgreSQL → Pilosa
明細・CDC ビットマップ索引
Django + Vue
アラート・ポリシー・レポート
▲ 担当範囲
チームと日常
写真は同僚の同意を得ているか、他の方の顔をぼかしています
ここで学んだこと
産業セキュリティの分野で、一般的な攻撃手法と権限昇格を理解し、Modbus、S7COMM、IEC104、OPC などの産業プロトコルとバイパス型のトラフィック監査に初めて触れました。業務コードを書きながら Django / DRF と Celery にもさらに習熟しました。
プロトコル解析は CPU 負荷の高いバイト単位の処理で、解析ライブラリは Cython でホットパスを C 拡張にコンパイルし、上位には Python インターフェースを保っています。この時期には C++ から Rust への移行プロジェクトにも参加しました。Redis の有効期限イベントによる集約窓、ビットマップによる異常種別の区別。どれも単純な部品で、高頻度な制御系通信の書き込みと検知の負荷をさばく工夫でした。
TECH STACK
- Python
- Django / DRF
- Celery
- Kafka
- Redis
- PostgreSQL
- Pilosa
- Suricata
- Cython
- Vue 2
- Docker