LoginSignup
7
3

More than 3 years have passed since last update.

CircleCIでVAddyのPrivateNetを利用したペネトレーションテストをやってみた

Last updated at Posted at 2020-01-28

概要

CircleCIでVAddyのPrivatenetを使用してみようと思ったのですが、意外とハマったのとあまり説明している記事がなかったので備忘録的に記事を書いてみようと思います。

本記事で説明すること

  • VAddyをCircleCI上で使用する時に必要な設定関連

本記事で説明しないこと

  • VAddyの契約方法やPrivateNetの事前設定について
  • VAddyでのシナリオ作成方法
  • VAddyの機能説明
  • CircleCIのFingerprint設定とか細かい話

手順

  • 1. シナリオの作成
  • 2. .circleci/config.yml の生成
    • 2.1. containerの種類を定義
    • 2.2. VAddy依存パッケージのインストールを定義
    • 2.3. 環境変数の設定を定義
    • 2.4. アプリケーションの依存パッケージ準備を定義
    • 2.5. SSHの事前準備設定を定義
    • 2.6. アプリケーションのビルド、および起動を定義
    • 2.7. VAddyとの接続、およびスキャンの実行を定義

1. シナリオの作成

事前にシナリオを作成しておいてください。

2. .circleci/config.yml の生成

jobをconfigに記載しましょう。
以降は.circleci/config.ymlに記述する定義内容と説明です。

2.1. containerの種類

今回はVMではなくdocker containerを使用します。

.circleci/config.yml
jobs:
  penetration-check:
    docker:
      - image: circleci/node:lts
    working_directory: ~/workspace
    steps:
      - checkout

2.2. VAddy依存パッケージのインストール

VAddyのPrivatenetツールはJAVAで動作するプログラムらしいので、openjdkが必要になります。

また、使用しているcontainerはdebian(ubuntu)なのでaptコマンドでパッケージの更新、およびインストールを行います。

.circleci/config.yml
      - run:
          name: VAddy依存パッケージのインストール
          command: sudo apt-get update && sudo apt-get install openjdk-8-jre

2.3. 環境変数の設定

Node.jsのyarnを使っていたりglobalにnpmのライブラリを入れている(pm2とか)場合など、環境変数の設定は以下のように設定します。
もちろんですがsourceコマンドで再読み込みするなどの作業は不要。

ローカルマシンのように .bash_profile.bashrc には直接書き込まず$BASH_ENVに対してechoで設定してあげる必要があるといった感じ。

.circleci/config.yml
      - run:
          name: 環境変数の設定
          command: |
            echo "export PATH=/usr/local/lib/node_modules:/usr/local/bin:$PATH" >> $BASH_ENV

2.4. アプリケーションの依存パッケージ準備

ここまでの工程ですでに依存パッケージをインストール、キャッシュしている場合は本作業は不要です。

circleci/config.yml
      - run:
          name: パッケージインストール
          command: yarn install

2.5. SSHの事前準備設定

VAddyのPrivateNetによるスキャンはポートフォワーディングによって実現しており、sshをスクリプト内で実施しているようです。
ただ、通常SSHの初回接続ではknown_hostsへの書き込み時に確認が表示されますが、CircleCIは対話型のツールではありませんので "Yes“ができません。

また、こういった自動化でよく使われるYesコマンドは機能しません。(できないと知らずにハマりました)

そのため、sshで本来行われるHostKeyCheckを無効化する必要があります。

.circleci/config.yml
      - run:
          name: SSH settings
          command: mkdir ~/.ssh/ && echo -e "Host pfd.vaddy.net\n\tStrictHostKeyChecking no\n" > ~/.ssh/config

2.6. アプリケーションのビルド、および起動

もしコンパイルやトランスパイルが必要なアプリの場合、ここでビルドするようにしてください。

.circleci/config.yml
      - run:
          name: アプリのビルド
          command: |
            yarn build

また、今回webアプリケーションをテストするわけですが、WEBアプリは性質上、実行結果は永遠に返ってきません。

そのためbackgroundで実行する必要がありますが、よく使われるコマンドやnohupコマンドはCircleCIでは使用できないようなので アプリケーション起動コマンドにbackground設定を付与します。

.circleci/config.yml
      - run:
          name: アプリの起動
          command: yarn start
          background: true

また、backgroundオプションでは実行結果が返らないので、ウェイト処理を入れないとアプリケーションが立ち上がる前に次のタスクが走ってしまいます。

そのため、以下のようにsleepコマンドを実行する必要があります。

.circleci/config.yml
      - run:
          name: スリープ
          command: sleep 5

2.7. VAddyとの接続、およびスキャンの実行

最後にスキャンを実行。

.circleci/config.yml
      - run:
          name: VAddyとの接続、及びスキャン
          command: curl localhost:3000/health && cd go-vaddy-master/privatenet && ./vaddy_privatenet.sh connect && ./vaddy_privatenet.sh scan

実行結果で異常が見つかった場合はステータスコードが1で返ってきますのでジョブはエラーとして処理されます。

最後に

設定内容、説明に誤りがある場合は是非コメントでお知らせいただけると嬉しいです。

仲間を募集しています!

ZEROBILLBANKでは一緒に働く仲間を募集中です。

ZEROBILLBANK JAPAN Inc.

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3