#実装方法 #機能紹介 セキュリティスキャナー

こんにちは、植田です。

今回はGeneXus17で標準のIDE上に組み込まれた、「Security Scanner – セキュリティスキャナー」についての
記事になります。こちらはOWASP のセキュリティリスクの中でもTop 10の脅威に関して、
検証対象のナレッジベース(KB)がどの程度のリスクが発生する可能性があるかをチェックする
ツールとして機能します。

参考:OWASP Top 10 – 2021

参考:組み込みツールのセキュリティスキャナー (genexus.jp)

こちらのツールは画面からの実行やMSBuildスクリプトをコマンドラインから実行することも可能です。

IDE上からの実行

チェックしたいKBを開き、ツール→セキュリティー→セキュリティスキャナーを選択します。

それぞれのチェック内容がセキュリティリスク毎に分類されています。
チェック内容ごとにエラーの検出方法を設定していきます。

選択可能なオプション

  • Off
  • Error
  • Warning
  • Information

主なチェックルール

Html usage #101XSS(Cross Site Scripting)Webフォーム上にテキスト要素のコントロールが配置された場合、その表示方式が「HTML」または「Raw HTML」に設定されている
SQL Command usage#103InjectionSQLコマンド(For eachやビジネスコンポーネントを使用しないデータの取得、更新)がソースコード上に定義されている
Javascript debug mode #106Broken Authentication生成されるjavascriptがデバッグモードとなっている(改行コード付きで見やすいもの)
Native code usage #108Broken Access ControlJava または C#コマンドがソースコード上に直接記述されている

例外を検知させたくないオブジェクトは「Security Objects White List」に設定していきます。
チェック内容単位でON/OFFが可能です。 ※設定内容は次回実行時にも記憶されます。

「スキャン」ボタンを押下するとスキャンが実行され、結果が出力ウィンドウに表示されます。
(出力ウィンドウは右クリックでファイルへの保存が可能です)

バッチによる実行

こちらのスキャンツールはMSBuildによるバッチ実行も可能とのことでしたので
Wikiにある通りにMSBuildファイルを作成してバッチ実行してみました。
※使用するMSBuildのバージョン、ファイルへのアクセス権等にご注意ください。

画面で実行していた時に121エラーのUserControlに関してはエラーではなく情報としておきたいので
今回はInformationで出力するようにあらかじめ設定を変えています。

タスク定義ファイル:securityscantest.msbuildの内容

<Import Project="$(GXInstall)\genexus.tasks.targets"/>
<Import Project="$(GXInstall)\security.tasks.targets"/>

<Target Name="SecurityScan">
    <OpenKnowledgeBase Directory="$(KBDir)"    />
    <SecurityScan XmlOutputFile="securityTest.xml"/>
</Target>

実行コマンド(例)

C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild C:\Models\Ukebarai\securityscantest.msbuild /verbosity:minimal /t:SecurityScan /p:KBDir=C:\Models\Ukebarai /p:GXInstall="C:\Program Files (x86)\GeneXus\GeneXus17JP"

コマンドプロンプト

securityTest.xmlに出力された内容(一部抜粋)

<Error>
  <Info>Code: 126 - ソースで SDT.FromXml() パターンが検出されました (Procedure 'LoadContext')</Info>
  <Level>1</Level>
</Error>
<Message>
  <Info>information: Code: 121 - WebForm で UserControl が検出されましたName 'SmoothNavMenu1' Type 'SmoothNavMenu'. (Web Master Panel 'AppMasterPage')</Info>
  <Level>3</Level>
</Message>

まとめ

如何でしたでしょうか?
1からKBを作成している場合、つい忘れがちな設定や、リスクにつながる実装がされている箇所をチェックする
際にこちらのツールが有用であることがわかりますね。
バッチ起動にしておくことで定期的にチェックすることも可能ですので例外的な実装手段の抑止にも
繋がると思います。

今後も気になる機能を検証しながら記事を上げていきたいと思います。
最後までご覧いただきありがとうございました!