坂本です。普段、土日休みはお出かけして過ごしていたのですが、自粛期間ではU-NEXTとNetflixを契約して海外ドラマをみて過ごしていました。楽しみにしていたイベントがすべて中止になってしまって残念ですが、新しい趣味ができたことはとても嬉しく思っています!
さて、今回はRedmineの脆弱性チェックを自動化したお話をしようと思います。
ファーエンドテクノロジーではオープンソースのプロジェクト管理ソフトウェアRedmineの開発への協力の一つとして、定期的な脆弱性検査を独自に行っています。Redmineをお使いの方々とRedmineのクラウド版で弊社が提供するサービス「My Redmine」のお客様により安心してRedmineをお使いいただくためです。また、脆弱性検査以外にも不具合検出の取り組みを行っています。
Redmineの脆弱性チェックには、Web脆弱性診断ツール「VAddy」を利用し、以下の流れで行なっています。
まず、クロールを作成します。Vaddyツールに検査用サーバーを登録しておき、Vaddyを介してRedmineにアクセスすることでクロールが溜まっていく仕組みです。具体的には、「開始URL」にアクセスしたあとRedmineの画面でチケット作成や編集などの操作を行い、最後に「終了URL」にアクセスします。開始URLアクセス後から終了URLにアクセスするまでの操作がクロールとなります。
クロールを作成したら、次はScanの作業です。Vaddy画面で実行するクロールを選択し、Scan実行ボタンをクリックすることでVaddyが脆弱性チェックを行なってくれます。Scan実行時間はクロールの大きさによって変わり、クロールの量が多ければ多いほど脆弱性チェックの時間はかかります。
この脆弱性チェックを行なった当初は「クロール作成」から「Scan実行」まで手作業で行ない、私の普段の業務は脆弱性チェックにかなり時間をかけていたのが課題でした。少しでも手間を省くため、脆弱性チェックを自動化することにしました。
まず、「クロール作成」のRedmineの操作部分を自動化しようと考えました。ここで使ったツールがseleniumです。seleniumで書いたrubyのコードを実行することで自動でブラウザが立ち上がり、Redmineの操作を自動で行なってくれます。また、人間が手作業で行うのはどうしても「漏れ」が生じてしまいがちですが、コード化することでその漏れを防ぎ、かつ高速にクロールを作成することができました。
これについては以前セミナーで発表した資料がありますので、こちらをご覧になってください。
ブラウザが自動で動くseleniumを使ってみました 〜Ruby編〜
作成したクロールにはLabelをつけることができます。私はRedmineの機能ごとにクロールを分けているため、「〇〇crawler(月/日)」とし日付も入れています。Labelの自動付与はVaddyの機能としてあり、開始URLに「label」というパラメータを付与することで簡単に実現できました。
公式ブログ( VAddyのクロール時にラベルを付与できるようになりました - クラウド型脆弱性診断ツール VAddyブログ )でわかりやすく紹介されています。
Scanは実行したいクロールのLabelを指定して実行します。Scanの自動化については、Vaddy側でgo-vaddyコマンド( cronで検査を定期実行 – VAddyサポートサイト )が配布されているため、それを活用しました。
export VADDY_TOKEN="" export VADDY_USER="" export VADDY_PROJECT_ID="" # labelを検索するためのキーワードを実行順にarrayに入れる array=("Api" "Authentication" "My_account" "Administration" "Administration_group" "Administration_settings" ...省略) # arrayの要素が含まれているラベルを検索し、最新のクロールデータ で実行 for crawl in ${array[@]} do echo "Scan ${crawl} crawl data" export VADDY_CRAWL=$crawl ./go-vaddy/bin/vaddy-linux-64bit done
実行するとコンソールに出力されます。実行するCrawlIDも表示されるので、どのクロールが実行されているのか目で見て確認できます。
Vaddyのクロール作成やScanの他にも、データベース初期化や最新版Redmineに更新するなど行う必要があります。そのため、1つのシェルスクリプトをVaddy検査用サーバーに置いてそれを実行することで脆弱性チェックを自動化することができました。
実は自動化にはまだ足りない作業がいくつかあります。
seleniumを実行すると、たまにエラーになる時があります。Redmineはどんどん新しい機能が追加されているため、seleniumのコードを定期的にメンテナンスする必要があります。そのため、seleniumのコードとRedmineが一致せず指定した時に「この要素はありません」と言われることがごく稀にあるため、エラーが出た時には通知する機能を追加する必要があります。
シェルスクリプトを実行すれば脆弱性チェックは自動化されますが、そのシェルスクリプトを実行するのはまだ自動化できていません。これについてはcronなどを設定して、完全に脆弱性チェックを自動化したいと思います。
今回、業務でRedmineの脆弱性チェックの自動化を行ってみて、seleniumという新しいツールのことを学べたり、rubyのコードを書いてみたりと幅広く学ぶことができたと思います。自動化しておくことで作業の手間がなくなり、とても楽になったなと感じています。自動化できるものについてはどんどん自動化していき、業務効率化して行こうと思いました。
![]() |
OSC 2019 島根でプレゼン。スライド作成で工夫したところを紹介します。 |
![]() |
オンライン相談会の開催に関するタスクをMy Redmineで管理している例を紹介しています。 |
![]() |
1Passwordのファミリープランに変更して、家族も使えるようにしました。 |
![]() |
Redmine公式サイトから最新機能を3つピックアップし、日本語で解説する連載記事を毎月書いています。 |
![]() |
サーバレスで色々なバッチ処理が簡単に実装できます。 |
![]() |
社員研修に伴うサポート体制変更・休業のお知らせ(5/20〜23) 社員研修に伴い、5月20日〜23日はサポート体制の変更および休業とさせていただきます。 |
![]() |
オープンソースカンファレンス2025 Nagoyaに弊社代表の前田が登壇(ブース出展あり) オープンソースカンファレンス(OSC)2025 Nagoyaに弊社代表の前田が登壇。『Redmineの意外と知らない便利な機能(Redmine 6.0 対応版)』をテーマに発表します。 |
![]() |
エンタープライズプラン向け「優先サポート」を開始 My Redmineでは、エンタープライズプランをご契約のお客様向けにサポート対応を優先的に行う「優先サポート(プライオリティサポート)」を開始いたしました。 |
![]() |
プロジェクト管理ツール「RedMica」バージョン 3.1.0をリリース Redmine互換のオープンソースソフトウェア ファーエンドテクノロジー株式会社は、2024年11月19日(日本時間)、Redmine互換のプロジェクト管理ソフトウェア「RedMica 3.1.0」をリリースしました。 |
![]() |
Redmineの最新情報をメールでお知らせする「Redmine News」配信中 新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け |