概要
最もセキュアなバックエンドインフラであっても、フロントエンドの設定が高いセキュリティ基準をサポートしていない場合は、リスクに直面します。Yellowfin ソフトウェアは、いくつかの設定を調整し、使用する予定のない設定を無効にすることで、非常に高いセキュリティを維持することができます。
HTTPSの設定
HTTPSはTomcatレベルで設定することができ、利用可能なプロトコルを完全に制御し、サービスがHTTP経由でアクセス可能かどうかを確認することができます。より詳細な情報は、こちらの記事で確認できます。
Yellowfin web.xmlの強化構成の改善
アプリケーションサーバレベルで強化をする場合、いくつかの考慮事項があります。公開または非公開のディプロイか、Yellowfinが他のアプリケーションに組み込まれているかどうか、ネットワーク構成や使用するAPIなど、様々な要因によりニーズは異なります。
Yellowfinのweb.xmlファイルは、<Yellowfin インストールディレクトリ>/appserver/webapps/ROOT/WEB-INF/web.xmlにあります。
自動リダイレクト
YellowfinがHTTPSでサービスを提供するように設定されている場合、セキュアポートに自動的にリダイレクトするように設定することもできます。
Code Block |
---|
|
<!-- Forward traffic to secure port -->
<security-constraint>
<web-resource-collection>
<web-resource-name>Automatic TLS Forwarding</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint> |
セキュアセッションCookie
JSESSION Cookieにセキュア属性を設定するには、web.xmlに以下を挿入します。この属性は、CookieがHTTPSなどのセキュアなチャネルでのみ送信されることを宣言します。
Code Block |
---|
|
<!-- Secure cookie attribute -->
<session-config>
<cookie-config>
<secure>true</secure>
</cookie-config>
</session-config> |
OWASPセキュアヘッダー
Yellowfinは、OWASPセキュアヘッダーフィルターを実装しており、これらの標準に従ってセキュリティヘッダーを設定するために使用できます。構成の例を以下に示します。しかし、これらの値は組織の標準やポリシーに合わせて調整する必要があります。Content-Security-Policyの場合、<param-value>で定義されている値のセットが、Yellowfin 機能の最小エントリーであることに注意してください。
Code Block |
---|
|
<!-- OWASP Secure Headers -->
<filter>
<filter-name>OWASPSecureHeaders</filter-name>
<filter-class>com.hof.servlet.OWASPSecureHeaders</filter-class>
<init-param>
<param-name>Strict-Transport-Security</param-name>
<param-value>max-age=315360000</param-value>
</init-param>
<init-param>
<param-name>X-Frame-Options</param-name>
<param-value>sameorigin</param-value>
</init-param>
<init-param>
<param-name>X-Content-Type-Options</param-name>
<param-value>nosniff</param-value>
</init-param>
<init-param>
<param-name>X-Permitted-Cross-Domain-Policies</param-name>
<param-value>none</param-value>
</init-param>
<init-param>
<param-name>Content-Security-Policy</param-name>
<param-value>default-src 'self' 'unsafe-inline' 'unsafe-eval'; font-src data: http:; img-src data: http:</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>OWASPSecureHeaders</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> |
CSRF フィルター
YellowfinのCSRFフィルターを有効にすると、アプリケーションリクエストにnonceが追加され、クロスサイトリクエストフォージェリ攻撃からインスタンスが保護されます。
Code Block |
---|
|
<!-- Yellowfin CSRF Filter -->
<filter>
<filter-name>CSRFFilter</filter-name>
<filter-class>com.hof.servlet.CSRFFilter</filter-class>
<init-param>
<param-name>AllowedEntry</param-name>
<param-value>/info.jsp,info_/threads.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CSRFFilter</filter-name>
<url-pattern>*.i4</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CSRFFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping> |
ここで特に重要なのは、AllowedEntryパラメーターです。カンマで区切られたこのURL一覧は、Yellowfinにnonceチェックをバイパスし、これらのURLから任意のページへのエントリーを許可するように指示します。
参照元フィルター
参照元フィルターは、CSRFフィルターに追加のセキュリティ層として提供されます。これにより、リクエストを処理する前に、リクエスト内の参照元フィールドがhostingdomainURLパラメーターに対して検証されます。ignoreパラメーターには、少なくとも次の項目と、Yellowfinを統合する場合などの外部アプリケーションから、その他のエントリーポイントが必要です。
Code Block |
---|
|
<filter>
<filter-name>RefererFilter</filter-name>
<filter-class>com.hof.servlet.RefererFilter</filter-class>
<init-param>
<param-name>hostingdomainURL</param-name>
<param-value>https://54.151.18.219</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>/RunDashboard.i4,/RunReport.i4,/*.js</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>RefererFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> |
未使用のAPIへのアクセスの無効化または制限
Yellowfin 9.3以降のリリースには、新しいREST APIが導入されています。REST APIを使用する場合は、従来のSOAP webサービスAPIを無効にできます。従来のAPIを有効にするスニペットであるAxisServletを検索し、このブロックをコメントアウトすることで無効にします。
Code Block |
---|
|
<!-- Web Services Servlet
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
--> |
または、RESTおよびJS APIの場合、使用していない場合は、次を追加します。
Code Block |
---|
|
<security-constraint>
<web-resource-collection>
<web-resource-name>UnusedAPI’s</web-resource-name>
<url-pattern>/api</url-pattern>
<url-pattern>/JsAPI</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>denyaccess</role-name>
</auth-constraint>
</security-constraint> |
情報ページ
情報ページは、サポートや分析に使用できます。これらのページには、OSバージョン、RDBMSタイプ、実行中のアプリケーションスレッドなどのシステム情報が含まれます。
URL | 説明 |
https://<YellowfinHostURL>/info.jsp | システム、アプリケーション、ロケール、ライセンス、サーバ側のソフトウェア詳細、ライブラリのバージョンなど、OS環境の詳細を表示します。 |
https://<YellowfinHostURL>/info_cache.jsp | Yellowfinのキャッシュステータスおよび容量情報を表示します。 |
https://<YellowfinHostURL>/info_cluster.jsp | 必要に応じて、Yellowfin クラスタ構成に関する情報を表示します。 |
https://<YellowfinHostURL>/info_language.jsp | 使用可能およびデフォルトのロケールを表示します。 |
https://<YellowfinHostURL>/info_threads.jsp | JVMスレッドとそのステータスを出力します。 |
https://<YellowfinHostURL>/info_threads_enhanced.jsp | 該当する場合は、スレッドの所有権とCPU時間を含めることで、上記を拡張します。 |
以下のスニペットを追加することで、これらを無効にすることができます。
Code Block |
---|
|
<security-constraint>
<web-resource-collection>
<web-resource-name>server-info</web-resource-name>
<url-pattern>/info.jsp</url-pattern>
<url-pattern>/info_browser.jsp</url-pattern>
<url-pattern>/info_cache.jsp</url-pattern>
<url-pattern>/info_threads.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>denyaccess</role-name>
</auth-constraint>
</security-constraint> |
これらのページは、問題が発生したときに、Yellowfin サポートから提供を依頼する場合があります。これらのページを無効にする以外にも、様々な要因に基づいてアクセスを制限できる方法があります。例えば、RemoteAddrFilterは、IPアドレスによってアクセスを制限します。
Code Block |
---|
|
<filter>
<filter-name>IPFilter</filter-name>
<filter-class>org.apache.catalina.filters.RemoteAddrFilter</filter-class>
<init-param>
<param-name>allow</param-name>
<param-value>127\.\d+\.\d+\.\d+</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>IPFilter</filter-name>
<url-pattern>/info.jsp</url-pattern>
<url-pattern>/info_browser.jsp</url-pattern>
<url-pattern>/info_cache.jsp</url-pattern>
<url-pattern>/info_threads.jsp</url-pattern>
</filter-mapping> |
これにより、任意の127.x.x.xアドレスからページにアクセスできるようになります。詳細については、TomcatドキュメントのAccess Control項目を参照してください。
導入および強化ガイド
概要に戻る