はじめに
2021年9月1日、火线安全平台
社から「DongTai(ドンタイ) IAST ("洞态IAST"の表記もある)」がOSSとして公開されました。
(IAST = Interactive Application Security Testing)
「グローバルプロフェッショナルIAST分野では初のオープンソースプロジェクト」と記載されていますが、Passive IASTでは世界初のOSSだと思います。
SaaS版も公開されています。「快速体验
」ページから環境を構築することもなくDongTai IASTを試すことができます。
本記事では DongTai IAST の導入を説明していきます。
ドキュメントをメモしていたりするので、こちらもどうぞ。
zenn.dev
環境構築
以下の環境で動作確認を行いました。
- DongTai 1.2.0
- EC2 (t2.medium / メモリ4G)
- Amazon Linux 2 (5.10.75-79.358.amzn2.x86_64)
- Docker 20.10.7
- Docker Compose 1.29.2
DongTaiをリポジトリから取得
# git clone https://github.com/HXSecurity/DongTai.git # cd DongTai/deploy/docker-compose/
DongTaiを起動
まずdtctl
スクリプトが動作することを確認します。以下のコマンドでヘルプが表示されます。
# ./dtctl [Info] Usage: [Usage] ./dtctl -h Display usage message [Usage] ./dtctl install -s mysql,redis -v 1.0.5 Install iast server [Usage] ./dtctl remove|rm [-d] Uninstall iast server [Usage] ./dtctl upgrade -t 1.1.2 Upgrade iast server [Usage] ./dtctl version Get image version [Usage] ./dtctl dbhash Get database schema hash [Usage] ./dtctl dbschema Export database schema [Usage] ./dtctl dbrestore -f FILEPATH Restore mysql database [Usage] ./dtctl dbbackup -d FILEPATH Backup mysql database [Usage] ./dtctl file Export docker-compose.yml [Usage] ./dtctl logs webapi|openapi|web|mysql|web|engine Extract tail logs
問題なく動作することが確認できたらインストールを実施します。
# ./dtctl install [Info] check docker servie status. [Info] docker service is up. [Info] check port status [+] please input web service port, default [80]: [Info] port 80 is ok. [Info] Starting docker compose ... Creating network "dongtai-iast_default" with the default driver Pulling dongtai-mysql (dongtai/dongtai-mysql:1.2.0)... 1.2.0: Pulling from dongtai/dongtai-mysql 72a69066d2fe: Pull complete 93619dbc5b36: Pull complete (...snip...) Creating dongtai-iast_dongtai-engine-task_1 ... done Creating dongtai-iast_dongtai-web_1 ... done [Important] Installation success!
docker-compose.yml の中身
DongTaiの動作には関係ないですが、起動しているコンテナを確認してみます。
構成情報が記載されているdocker-compose.yml
は削除されるようになっていますが、./dtctl file
コマンドを用いることで、docker-compose.yml
を出力できます。
# ./dtctl file # cat docker-compose.yml
出力されたdocker-compose.yml
の内容は以下になっています。
version: "2" services: dongtai-mysql: image: dongtai/dongtai-mysql:1.2.0 restart: always volumes: - "/root/work/DongTai/deploy/docker-compose/data:/var/lib/mysql:rw" logging: driver: "json-file" options: max-size: "10m" dongtai-redis: image: dongtai/dongtai-redis:1.2.0 restart: always logging: driver: "json-file" options: max-size: "10m" dongtai-webapi: image: "dongtai/dongtai-webapi:1.2.0" restart: always volumes: - "/root/work/DongTai/deploy/docker-compose/config-tutorial.ini:/opt/dongtai/webapi/conf/config.ini" logging: driver: "json-file" options: max-size: "10m" dongtai-web: image: "dongtai/dongtai-web:1.2.0" restart: always ports: - "80:80" volumes: - "/root/work/DongTai/deploy/docker-compose/nginx.conf:/etc/nginx/nginx.conf" depends_on: - dongtai-webapi logging: driver: "json-file" options: max-size: "10m" dongtai-openapi: image: "dongtai/dongtai-openapi:1.2.0" restart: always volumes: - "/root/work/DongTai/deploy/docker-compose/config-tutorial.ini:/opt/dongtai/openapi/conf/config.ini" logging: driver: "json-file" options: max-size: "10m" dongtai-engine: image: "dongtai/dongtai-engine:1.2.0" restart: always volumes: - "/root/work/DongTai/deploy/docker-compose/config-tutorial.ini:/opt/dongtai/engine/conf/config.ini" logging: driver: "json-file" options: max-size: "10m" dongtai-engine-task: image: "dongtai/dongtai-engine:1.2.0" restart: always command: ["/opt/dongtai/engine/docker/entrypoint.sh", "task"] volumes: - "/root/work/DongTai/deploy/docker-compose/config-tutorial.ini:/opt/dongtai/engine/conf/config.ini" depends_on: - dongtai-engine logging: driver: "json-file" options: max-size: "10m"
動作確認
実際に DongTai を使ってみます。
現在以下の言語に対応しています。
- Java
- Python
- PHP (ベータ版)
今回はJavaアプリケーションを用いていきます。
IASTのJavaエージェントの取得
DongTaiの起動が完了したらアクセスします。
ログイン画面が表示されるので初期ログイン情報(admin/admin
)を入力します。
ログインするとDongTaiが導入されているアプリケーション一覧画面が表示されます。
まだDongTaiを導入しているアプリケーションがないため、空の状態になっています。
右上の「+ Add Agent」ボタンを押下すると、エージェントの導入画面へ遷移することができます。
「DongTai Java Agent」ボタンを押下してJavaエージェント(agent.jar
)をダウンロードします。
脆弱アプリケーションの起動
脆弱なアプリケーションには以下のSpring Bootアプリケーションを利用します。
motikan2010/Vulnerability-Spring-Boot
ビルド
起動前にビルドをします。
$ mvn clean package -Dmaven.test.skip=true
起動
起動時のコマンドに「-javaagent:agent.jar
」オプション含めることで、DongTaiのJavaエージェントをロードします。
$ java -javaagent:agent.jar -jar target/vuln-0.0.1-SNAPSHOT.jar
起動が成功すると起動ログに「[io.dongtai.agent]~
」が表示されます。
$ java -javaagent:agent.jar -jar target/vuln-0.0.1-SNAPSHOT.jar [io.dongtai.agent] The engine configuration file is initialized successfully. file is /Users/motikan2010/IdeaProjects/Vulnerability-Spring-Boot/config/iast.properties [io.dongtai.agent] register agent [io.dongtai.agent] Agent has successfully registered with http://3.xxx.yyy.zzz/openapi [io.dongtai.agent] engine delay time is 0 s [io.dongtai.agent] Check if the engine[/var/folders/yw/0wl7x4w56tz9326ncdt107jr0000gn/T//iast-inject.jar] needs to be updated [io.dongtai.agent] Engine does not exist in local cache, the engine will be downloaded. [io.dongtai.agent] The remote file http://3.xxx.yyy.zzz/openapi/api/v1/engine/download?engineName=iast-inject was successfully written to the local cache. [io.dongtai.agent] The remote file http://3.xxx.yyy.zzz/openapi/api/v1/engine/download?engineName=iast-core was successfully written to the local cache. 2022-01-07 06:52:05.870 [cn.huoxian.dongtai.engine] INFO DongTai Engine is about to be installed, the installation mode is agent 2022-01-07 06:52:05.879 [cn.huoxian.dongtai.engine] INFO Initialize the core configuration of the engine 2022-01-07 06:52:06.456 [cn.huoxian.dongtai.engine] INFO The engine's core configuration is initialized successfully. 2022-01-07 06:52:06.456 [cn.huoxian.dongtai.engine] INFO Start the data reporting submodule 2022-01-07 06:52:06.457 [cn.huoxian.dongtai.engine] INFO The data reporting submodule started successfully 2022-01-07 06:52:06.458 [cn.huoxian.dongtai.engine] INFO Register spy submodule 2022-01-07 06:52:06.461 [cn.huoxian.dongtai.engine] INFO Spy sub-module registered successfully 2022-01-07 06:52:06.461 [cn.huoxian.dongtai.engine] INFO Install data acquisition and analysis sub-modules 2022-01-07 06:52:07.392 [cn.huoxian.dongtai.engine] INFO The sub-module of data acquisition and analysis is successfully installed 2022-01-07 06:52:07.394 [cn.huoxian.dongtai.engine] INFO DongTai Engine is successfully installed to the JVM, and it takes 1 s 2022-01-07 06:52:07.394 [cn.huoxian.dongtai.engine] INFO Turn on the engine 2022-01-07 06:52:07.395 [cn.huoxian.dongtai.engine] INFO Engine opened successfully [io.dongtai.agent] DongTai engine start successfully. SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. (...snip...)
アプリケーションの/lfi
にアクセスし、「sample.txt
」を入力し、送信します。
ここで重要なのは「../../../../../etc/passwd
」といった攻撃コードではなく、正常値である「sample.txt
」を入力している点です。
検出した脆弱性の確認
脆弱性が検出されたことを確認するために DongTai に戻ります。
DongTai が導入されたアプリケーションが追加されていることが確認できます。
「应用漏洞
」(アプリケーションの脆弱性)から検出された脆弱性を確認することができます。
検出された脆弱性内に「/lfi 的GET 出现路径穿越漏洞,位置:GET/HEADER
」というものがあり、パストラバーサルが無事検出されたことが確認できます。
(パストラバーサルは中国語表記だと"路径穿越"になるそうです。)
脆弱性を押下することで、脆弱性の詳細情報を見ることできます。
脆弱性の詳細情報は以下のように表示されます。
脆弱性があるパラメータなどの情報があります。
少し下に行くと脆弱性が検出されるまでの流れが表示されます。
IASTの特徴である「污点来源 (source)」「传播方法 (propagator)」「危险方法 (sink)」を確認することできます。
ここまでが DongTai の導入方法・使い方でした。
まとめ
- DongTai は OSS の IAST(ソースコードが見れる!)
- アプリケーションに導入し、正常系をテストするだけで脆弱性を検出することができる。
- IASTの実装を見ることができるのは珍しいので、いろいろ分かり次第「【導入篇】」の続きを書いていきたい次第。
豆知識
Active IAST と Passive IAST の違い
IASTは「Active IAST (アクティブ IAST)」と「Passive IAST (パッシブ IAST)」に分類されます。
2つの違いについては「開発者ファーストのアプリケーションセキュリティ完全ガイド」で説明されています。
開発者ファーストのアプリケーションセキュリティ完全ガイド
IAST には2つのバリアントがあります。
パッシブ IAST は、テスト環境で実行するアプリケーションに使用します。 アプリケーションでユースケースベースのQAテストを実行すると、エージェントがセキュリティの潜在的な脆弱性を特定します。 このアプローチでは、SAST または DAST を使用して検出できる脆弱性のサブセットも検出します。
アクティブ IAST は、ライブ環境で実行しているアプリケーションに使用します。 これは DAST ツールの拡張機能として機能します。実行中のアプリケーションにエージェントがインストールされ、アプリケーションに対して DAST テストを実行します。 エージェントはスタックトレース情報を確認し、サーバー側で詳細な動作を分析できるため、DASTのプロセスと結果が改善されます。 アクティブ IAST は、スキャン時間を短縮し、DASTの攻撃結果を検証するのに役立ちます。
DongTai IAST は Passive IAST に分類されます。
Active IAST にもOSSには「OpenRASP-IAST(Baidu社 開発)」があります。
baidu-security/openrasp-iast: IAST 灰盒扫描工具
IASTの実装に関して
IASTの実装に興味のある人は以下の記事がおすすめです。
- 洞态 IAST 试用 | 素十八
- セキュリティリサーチャーがDongTaiを試した感想、実装についてが書かれています。
- 浅谈被动式IAST产品与技术实现-代码实现Demo篇 (パッシブIASTの製品・技術実装の紹介 - コード実装デモ)
- IASTの重要部分が抽出されたアプリケーションを用いて、IASTの実装について説明されています。
- このサイトで紹介されているリポジトリiiiusky/java_iast_example: JAVA IAST Example