iDempiereをより安全な状況及び状態で運用する

セキュリティー対策で、これさえやっておけば安心という事はありません。そのためここでは、iDempiereをより安全な状況及び状態で運用するためにどのような事ができるか、そしてiDempiereにはセキュリティーを維持/向上させるためにどのような機能があるのか、脆弱性を悪用する各種攻撃に対してどのように対応しているのか(どのような対応ができるのか)など、iDempiereのセキュリティーに関連する事を広範囲に調査及び研究し、その成果をまとめています。

目次

対策箇所別、iDempiereを導入する際に実施/検討する主な対策
対策箇所別、iDempiereを導入する際に実施/検討する主な対策
攻撃/脅威の種類別、iDempiereを導入する際に実施/検討する主な対策
攻撃/脅威の種類別、iDempiereを導入する際に実施/検討する主な対策

iDempiereへのアクセスに関連するセキュリティー

ここでは不正侵入や不正アクセスを防止し、より安全にネットワークを使用してiDempiereにアクセスするためにどのような施策があるのか調査及び研究し、その成果をまとめています。

VPN(Virtual Private Network)の利用

iDempiereは業務アプリケーションですので、通常iDempiereにアクセスする人は社内のユーザーのみです。iDempiereをクラウドやデータセンターなどの社外のサーバーで使用する場合には社内からのみアクセスできるようにVPNを構築する事で、セキュリティーの大きな向上が期待できます。

 

SSL/TLS(https)の利用 (必須

SSLサーバー証明書によりサイトの運営組織が実在する事が信頼される第3者により証明され、httpsを使用しブラウザとWebサーバー間の通信を暗号化する事ができます。オンプレミスで社内の閉じたネットワークでiDempiereを運用する場合でも、ログインパスワードなどは暗号化して通信する必要がありますので、iDempiereを運用する際にはほぼ必須と言って良い技術です。httpsを使用する事により、HTTP/2による通信が可能となり、レスポンスの向上も期待できます。

関連するコンテンツ

◆httpsのポート443の変更

httpsのポートはウェルノンポート(Well-known Port)として443番が割り当てられていますが、他の番号にする事でも、外部からの不正アクセスの抑制につながりセキュリティの向上が期待できます。

【注意】SSLサーバー証明書の取得について

SSLサーバー証明書を発行するベンダーの中には、サイト運営企業の実在確認審査を行わないSSL暗号化通信のみのサービスを販売しているところがあります。この場合、サイトの持ち主の実在性が証明されていないため、サイト利用者に不信感を与える可能性があります。SSLサーバー証明書は、無料で作成できる通称オレオレ証明から、格安で発行するベンダー、サイト運営企業の実在性を確認しそれなりの金額を必要とするベンダーまで色々とありますので、利用目的に合わせて比較検討し取得して下さい。

 

ファイアウォールとリバースプロキシ

リバースプロキシのサーバーを配置する事により負荷分散が行えるようになるのと同時にファイアウォールとしての役割も期待できます。

◆アクセス可能なポートの制限

  • iDempiereのWeb-UIにアクセスするのに必要なポートはhttps通信を行うためのポートだけです。アクセス可能なポートを制限する事によりセキュリティーの向上が期待できます。またhttpsに使用されるポートは443番がウェルノンポートとして知られていますが、これを変更するだけでも不正アクセスの抑制につながりセキュリティーの向上が期待できます。※http用のポート(例80番ポート)もアクセスできないように制限して下さい。
  • サーバーがクラウド環境にある場合はメンテナンス用にSSH接続用のポートは開けておきたいと思うでしょう。その場合でもSSHはウェルノンポートとして22番が割り当てられていますので、他の番号にする事でセキュリティーの向上が期待できます。

関連するコンテンツ

 

◆アクセス可能なURLの制限

iDempiereは、基本的にはシングルページのWebアプリケーションです。iDempiereの初期設定では、https://ドメイン名/webui/です。ファイアウォールとして通過を許可するURLをhttps://ドメイン名/webui/配下に限定する事でセキュリティーの向上が期待できます。

Webサービスを使用する場合はhttps://ドメイン名/ADInterface のURLも通過を許可しておく必要があります。

そして、https://ドメイン名/webui/の"webui"部分は、iDempiereの初期設定でありiDempiereの開発者であればだれでも知っています。そのため"webui"を部分を変更する事でも、セキュリティーの向上が期待できます。WebサービスのURLも同様です。

関連するコンテンツ

 

◆アクセス可能なIPの制限

iDempiereは基本的にERPであり業務を管理するアプリケーションのため、不特定多数の人がアクセスするようなシステムではありません。そのため、アクセス可能なIPを制限する事でセキュリティーの向上が期待できます。

 

検索エンジンで検索されないようにする

iDempiereのログイン画面を不特定多数の人がアクセスできる環境に置く場合、検索エンジンで検索されないようにするだけでも、悪意のある第3者にサイトが発見されにくくなり、セキュリティーに関するリスクを低減させるのにつながる事が期待できます。

 

クライアント端末のセキュリティー対策

インターネットを通じて、iDempiereのWeb-UIに安全にアクセスするためには、クラインアト端末もセキュリティーに配慮する必要があります。

◆セキュリティーソフトの使用

iDempiereに安全にアクセスするためには、アクセスするクライアント端末自体のセキュリティーを確保するのが必要不可欠です。セキュリティーソフトなどを活用し、ウィルスなどに感染しないように健康を保って下さい。

◆クライアント証明書の使用

作成中…

iDempiereのセキュリティーに関連する機能や取り組み

ここではiDempiereのセキュリティーに関係する機能や特徴について、調査及び研究しその成果をまとめています。iDempiereのセキュリティー関係の情報や機能についてはiDempiereのWikiにもまとめられていますので、あわせて参照して下さい。

参考サイト

 

ログインに関連する機能

iDempiereは基本的にログインID(メールアドレスorユーザー名)とパスワードでユーザー認証を行い、iDempiereへのログインを許可します。iDempiereではユーザー認証をより安全に行うために色々な機能を提供していますが、ユーザー自身がログインIDとパスワードの組み合わせを漏洩しないように気をつける事もとても重要なセキュリティー対策です。

◆ログインIDの選択(メールアドレス or ユーザー名)

iDempiereではログインの際に使用するIDをメールアドレスにするかユーザー名にするか選択する事ができます。

◆パスワードの暗号化

iDempiereの初期状態では、ログインパスワードはデータベースにそのまま文字列の情報として保存されており、暗号化されていません。これはiDempiereがオープンソースという性質上、オープン性を損なわない配慮だと思います。その代わり、ログインパスワードを暗号化するプロセスが用意されています。運用開始時までには、ログインパスワードを暗号化して下さい。

関連するコンテンツ

◆パスワードの有効期限設定

パスワードに有効期限を設定する事ができます。

◆パスワードポリシーの設定

パスワードポリシーを設定して、簡単なパスワードに変更できないようにする事ができます。

関連するコンテンツ

◆Remember Me (ログイン情報の保存)

iDempiereの初期設定ではログイン処理を省力化するためにRemember Meの機能として直近にログインしたIDとパスワードを自動入力する機能があります。この機能はコンフィグ設定で無効にする事もできます。またパスワードの入力だけを促すようにする事も可能です。

関連するコンテンツ

◆アカウントロック

アカウントの使用を停止するパスワードの誤入力回数を設定する事ができます。

関連するコンテンツ

◆LDAP

iDempiereはLDAPを利用してログインする事ができます。

関連するコンテンツ

◆ログインパスワードの変更

パスワード変更はもちろん行う事ができますし、ログイン時にパスワードの変更を強制させる事もできます。

関連するコンテンツ

【注意】初期登録ユーザーのログインパスワードを変更する!!

iDempiereには初期状態でユーザーが4名( SuperUser / System / GardenAdmin / GardenUser )登録されています。このユーザーはCompiereの頃から登録されているユーザーであり、そのパスワードは広く知られています。そのためiDempiereを運用開始する前に、この初期登録ユーザーのパスワードは必ず変更するようにして下さい。

 

パスワードに関するセキュリティー対策

IPA(独立行政法人 情報処理推進機構)では、「安全なウェブサイトの作り方(改訂第7版)」でパスワードに関する対策としていくつかの指針を出しています。その指針に対するiDempiereにおける対応状況を下記のコンテンツにまとめています。

関連するコンテンツ

 

◆認証が失敗した際のログ

iDempiereではパスワードなどの入力を間違えて、認証が失敗した際にそのログをiDempiereのサーバーデイレクトリ直下にあるlogデイレクトリのAuthFailure.logファイルに出力します。

 

ビジネスロジックの隠蔽

iDempiereのWeb-UIの開発フレームワークとして使用されているZK( https://www.zkoss.org/ )は、ユーザーインターフェースの専用の開発フレームワークで、ビジネスロジック(データ処理ロジック)は基本的にサーバー側で実行されます。そのため、ビジネスロジックがクライアント側のブラウザに露呈される事はありません。ビジネスロジックをサーバー側で処理するということは、サーバー側に機密情報を保持しクライアント側に表示する事無く処理を行う事ができるという事であり、情報漏洩を防止しセキュリティーを向上させる事ができます。

関連するコンテンツ

 

アクセスコントロール

iDempiereではユーザーマスタと職責(Role)マスタにより、誰がどんな業務処理ができて、どの組織のデータにアクセスできるのか制御する事ができます。

関連するコンテンツ

◆各種業務メニューへのアクセスコントロール

iDempiereでは職責により各種業務メニューへのアクセスコントロールが設定できます。職責でアクセスコントロールする事ができる各種業務メニューは次の通りです。

  • ウィンドウ
  • レポートとプロセス
  • フォーム
  • 検索ウィンドウ
  • ワークフロー
  • タスク
  • 伝票ステータス更新処理

 

◆組織データへのアクセスコントロール

iDempiereでは、職責もしくはユーザー毎にどの組織のデータにアクセスを許可するのか設定する事ができます。

 

◆レコードへのアクセスコントール

iDempiereでは、レコード毎にアクセスコントロールを行う事もできます。ただし、レコード毎にアクセス制限を設定するのはシステム運用が大変になる可能性がありますので、個人的にはあまりおススメしていません。レコード毎にアクセスコントロールを設定しないですむように、アクセスコントロール全体をデザインする事をオススメします。

 

◆ツールバーのアイコンへのアクセスコントロール

iDempiereは、標準データ入力画面(ウィンドウ)やレポート(帳票)出力時に表示されるツールバーのアイコンにも、アクセスコントロールを設定する事ができます。職責とウィンドウとレポート毎に細かく設定する事ができます。セキュリティーの観点では、少なくともウィンドウにある一覧レポートのアイコンとダウンロード(エクスポート)のアイコン、レポートの出力画面に表示されるダウンロード(エクスポート)のアイコンについては、アクセスコントロールを設定すべきだと思います。

レポートの出力及びダウンロードを許可する場合でも、レポートに表示するレコード数の出力制限は設定すべきです。情報流出は社内の人間により行われる場合もあります。その際に大量のデータが簡単に一度にダウンロードできてしまう事はセキュリティー設定的に好ましい状態とは言えません。またレポートに表示するレコード数を制限しておくことはシステムのパフォーマンス的にも好ましいです。

関連するコンテンツ

 

アクセスログ

◆セッションログ

iDempiereでは、ログインの履歴を記録しています。セッションとアクセスしてきたIPアドレスを、更新ログと関連付けて確認する事ができます。

◆更新ログ

誰がいつ何をしたか確認する事ができます。iDempiereではテーブルのカラム毎にログを記録するかどうか設定する事ができます。

関連するコンテンツ

◆プロセスログ

プロセスの実行ログです。いつだれがどんなパラメータを指定してプロセスを実行し、実行した結果どうなったのか確認する事ができます。

 

iDempiereのセッション管理

◆iDempiereのセッション管理

作成中…。

◆セッションの有効時間設定

iDempiereのセッションの有効時間の設定はシステムコンフィグ設定のZK_SESSION_TEIMEOUT_IN_SECONDSの値に秒数を設定する事で行う事ができます。短すぎると業務に支障をきたす事もあると思いますが、長すぎてもセキュリティー的には好ましくありません。適切な値を設定して下さい。

 

脆弱性が発見された際のiDempiereコミュニティーの対応

iDempiereに不具合が発見された場合、通常はJIRAにチケットを作成したりフォーラムに投稿する事で報告しますが、セキュリティーの脆弱性に係る不具合については、いきなり公にせず直接セキュリティーの脆弱性に係る不具合の連絡専用のメールアドレスに報告して欲しい旨がWikiで公開されています。そして報告されたセキュリティーに関する脆弱性の不具合は、フェーズ分けしたアプローチをとる事が公開されています。

参考サイト

過去の対応をみても、iDempiereコミュニティーではセキュリティーの脆弱性に係る不具合は最優先で対応しています。

各種攻撃に対するiDempiereの対策

ここでは具体的な攻撃に対してiDempiereがどのように対策しているのか、調査及び研究しその成果をまとめています。

SQLインジェクション

iDempiereはSQLの実行にはプリペアド文を使用しており、プレースホルダについては、動的プレースホルダと静的プレースホルダのハイブリッド型と考える事ができます。

関連するコンテンツ

 

OSコマンドインジェクション

作成中…

HTTPヘッダインジェクション

作成中…

メールヘッダインジェクション

作成中…

ディレクトリ・トラバーサル

IPAが発行している「安全なウェブサイトの作り方 改定第7版」によると"ディレクトリトラバーサル は次のように説明されています。

ウェブアプリケーションの中には、外部からのパラメータにウェブサーバー内のファイル名を直接指定しているものがあります。このようなウェブアプリケーションでは、ファイル名指定の実装に問題がある場合、攻撃者に任意のファイルを指定され、ウェブアプリケーションが意図しない処理を行ってしまう場合があります。このような問題の一種を「ディレクトリ・トラバーサルの脆弱性」と呼び、この問題を悪用した攻撃手法の一つに、「デイレクトリ・トラバーサル攻撃」があります。

そういった意味では、iDempiereはシングルページアプリケーションであり、ファイアウォールを配置して"https://ドメイン名/webui/"配下以外のURLへのアクセスを制限させる事でも、ディレクトリトラバーサルへの対策になるのではないかと思います。

 

クロスサイトスクリプティング(XSS:Cross-site scripting)

作成中…

関連するコンテンツ

 

クロスサイト・リクエスト・フォージェリ(CSRF:Cross-site Request Forgery)

クロスサイト・リクエスト・フォージェリ攻撃には、iDempiereがWeb-UIの開発フレームワークとして使用しているZKに強い耐性があります。ZKはHTMLのID属性にアクセスする度に異なる値を設定し、その値が異なる場合、リクエストを受け付けません。CSRF攻撃を行うためにID属性を予め予想して悪意のあるリクエストを用意しておくことは困難です。

関連するコンテンツ

 

Dos(Denial Of Service)

作成中…

関連するコンテンツ

 

バッファオーバーフロー

IPAが発行している「安全なウェブサイトの作り方」によるとバッファオーバーフローの脆弱性を悪用した攻撃は、C、C++、アセンブラなどの直接メモリを操作できる言語で記述されている場合に起こり、PHPやPerl、Javaなど直接メモリを操作できない言語では、バッファオーバーフローの脆弱性の影響を受ける可能性は低いとの事です。iDempiereは、Javaで記述されていますので、バッファオーバーフローの脆弱性の影響を受ける可能性は低いと考える事ができます。

iDempiereを開発する際に脆弱性を作らないために注意すべき事項

ここではiDempiereを開発する際に、脆弱性を作らないために注意すべき事項について調査及び研究し、その成果をまとめています。

SQLを実行する際の注意点

IPAが発行している「安全なウェブサイトの作り方」では、プリペアド文(Prepared Statement)とプレースホルダを使用してSQLを実行する事がSQLインジェクション対策の有効な手段として紹介されています。iDempiereのコミュニティーではプロジェクトの初期のチケットでSQLの実行を、プリペアド文を使用した統一的な書き方に修正しています。iDempiereをカスタマイズする際には、IDEMPIERE-568のチケットを参考にプリペアド文とプレースホルダを使用した統一的な書き方を遵守する事で、SQLインジェクション対策になるだけでなく、メモリーリークやコネクションリークなどを未然に防ぎ、安定したシステム稼働にもつながります。

参考サイト

関連するコンテンツ

 

フォームを作成する際の注意点

フォームを作成する際には、使用するフレームワークのセキュリティー対応について学んだ上で開発して下さい。iDempiereのWeb-UIの開発フレームワークであるZKについては下記にまとめていますので参照して下さい。

関連するコンテンツ

 

信頼できないWeb上のリソースを使用しない

◆ジャスパーレポートについて

オープンソースのBIツールとして有名なジャスパーレポートはiDempiereのレポート(帳票)作成のツールとして使用する事ができます。ジャスパーレポートのレポート定義ファイルには、SQLを直接記述する事ができます。そのため、信頼できないジャスパーレポートのファイルを使用すると思わぬセキュリティー事故を招きかねません。ジャスパーレポートを使用する際には、信頼できるレポート定義ファイルのみ使用するようにして下さい。

データベースに関連するセキュリティー

データベース(※基本的にPostgreSQLを想定)に関するセキュリティーについては基本的にこのコンテンツの範囲外となりますので、各自調査及び研究し、セキュリティーの向上に取り組んで下さい。

データベースへアクセスするユーザーとパスワードの管理

基本的な事ですがデータベースへアクセスできるユーザーとパスワードは適切に管理して下さい。

 

データベースへは外部から直接アクセスできないようにする

データベースへはiDempiereを通してアクセスしますので、外部からデータベースに直接アクセスする必要性は、メンテナンス以外にはないはずです。データベースへの接続ポート(PostgreSQLのウェルノンポートは5432)は外部からアクセスできないように制限して下さい。

 

pg_hba.confファイルを適切に設定する

PostgreSQLでは、クライアント認証はデータベースクラスタのデータディレクトリ内の、pg_hba.confという名前の設定ファイルで管理されています。HBAとは、host-based authentication: ホストベース認証の略です。pg_hba.confを適切に設定するようにして下さい。

 

iDempiereがデータベースへアクセスするための情報を保持するiDempiereEnv.propertiesファイルに適切なアクセス権を付与する

iDempiereがデータベースにアクセスするために必要となる情報は、iDempiereのサーバーデイレクトリの直下にあるidempiereEnv.propertiesファイルに記述されています。このファイルには適切なアクセス権を付与しておいて下さい。

 

データベースに保存しているデータの暗号化

iDempiereの標準機能でもデータベースに暗号化したデータを保存する事は可能です。特定の情報だけを暗号化して保存したいという要件であれば活用を検討しても良いと思います。ただしログインパスワードはハッシュを利用した暗号化によりデータベースに保存する事ができますが、ログインパスワード以外のデータを暗号化する処理は、セキュリティー的には、あまり高くないとされてる方式ですので、パスワード以外のデータも暗号化して保存したい場合は、暗号化の処理部分はカスタマイズして使用する事をおススメします。

関連するコンテンツ

しかしながら、そもそもすべてのデータを暗号化して保存したいのであれば、DBへ処理を委譲する事を検討した方が良いでしょう。PostgreSQLのドキュメントには暗号化オプションとう項目がありますので参考にして下さい。

参考サイト

またSRA OSS, Inc.が提供しているPostgreSQLの有償版の製品PowerGres Plusでは、透過的に(アプリケーション側で意識する事無く)データを暗号化し、保存する事ができるようですので、そのような製品を選択する事も検討して良いのではないかと思います。PostgreSQLのデータの暗号化には、他にも色々な方法やツールがあるようですので暗号化を検討されている方は色々と検索してみて下さい。

参考サイト

OSに関連するセキュリティー

OS(※主にLinuxを想定)に関連するセキュリティーについては、基本的にこのコンテンツの範囲外となりますので、各自調査及び研究し、セキュリティーの向上に取り組んで下さい。

OSへアクセスするユーザーとパスワードの管理

基本的な事ですがOSへアクセスできるユーザーとパスワードは適切に管理して下さい。

 

アクセス可能なポートの制限

必要なポート以外はアクセスできないように制限しておきましょう。

サーバーがクラウド環境にある場合にはメンテナンス用にSSH接続用のポートは開けておきたいと思うでしょう。その場合でもSSHはウェルノンポートとして22番が割り当てられていますので、他の番号にする事でセキュリティーの向上が期待できます。

関連するコンテンツ