「セキュリティ」カテゴリーアーカイブ

インターネットからのアクセス認証にFortigateを利用してみた。

公開サーバにアクセス認証をしようと思うと、BASIC認証が比較的簡単に設定出来て便利ですよね。
ただ、今時ではありますが、HTTPプロコルにおけるBASIC認証は脆弱性が指摘されていて、あまり使いたくはない方法です。
HTTPSでSSL暗号化されていれば良いのですが、未だにHTTPプロトコルしか使えない状況では不便でなりません。
そこで、Fortigateを使ってもっとセキュリティの高い認証を試みてみようと思い立った次第です。
サーバ側に認証機能を持たせたくない場合などでも、この方法で認証すれば便利です。

更に、この方法を使うと、通常のSSHなどでアクセスする際に、直接サーバにログインを試みようとすることも遮断できます。
詳しくは後ほど説明しますね。

目的

公開サーバへのHTTP/HTTPS/SSH等によるアクセス時に、一度認証を行ってからしか接続出来なくします。

サーバ本体側の認証もあるのですが、その前に一度Fortigate側で認証を行わないと、サーバ本体へのアクセスもログインを行う行為すらも出来ないということです。

具体的には、以下の流れになります。

①Webブラウザで対象アドレスへアクセスします。
②Fortigateが準備したログイン画面が表示され、認証を求められます。
 認証方式は、Fortigate側で選択出来ます。
 今回は単純にIDとパスワードだけで説明します。
③認証が完了すると、通常通りサーバへアクセス出来ます。
 WebサーバへのHTTP/HTTPSアクセスであれば、目的のホームページが表示されます。
これだけだと、BASIC認証と変わらないと思いますが、実はこれだけではありません。
SSHによるアクセスも、②の認証を行わないとアクセス出来ないのです。
SSHのID/パスワードによるログインに至る前に、一度Web画面上でログインを行わないとSSHのログインにも進まないということです。
更にセキュリティを高めたい人には、二要素認証なども取り入れることが可能です。

ぐっとセキュリティ効果が高まりますよね。
機械的なログイン操作を用いたい場合には容赦なく壁になってしまいますので、システム的な使い方をする場合には向きませんが、通常利用時のセキュリティ効果を高めたい場合には便利です。
BruteForce攻撃等には効果てきめんじゃないかな?と思っています。

設定方法

概要

まずは流れを説明します。

Fortigate側で新たにユーザを作成します。
IDとパスワードを設定します。
次に、ユーザグループを作成し、先ほど作ったユーザを追加します。
このユーザグループをFortigateで設定する通常のポリシーにおいて、送信元アドレスと共に登録するだけです。

サポートに確認したら古いインタフェースの英文による説明が送付されてきて、その内容も若干微妙な設定内容だったので、ここに現状の設定方法を記録しようと思いました。
滅多にやらないことなので、次やる時に思い出さないと思ったので(^^ゞ

でも、やってみるとすごく簡単な設定ですね。

手順1:ユーザ作成

ユーザ&デバイス→新規追加→ローカルユーザ→次へと進みます。

画面はこんな感じになっていると思います。
ここで、ユーザ名とパスワードを変更して、新たなユーザ名とパスワードを設定します。

ここで必要に応じてEメールアドレスを登録します。
また、SMSや二要素認証の項目も必要に応じて設定します。

特に問題なければ、このまま「サブミット」を押して登録完了です。

手順2:ユーザグループ作成

ユーザデバイス→ユーザグループ→新規作成と進めます。

ユーザグループの名前(英数字のみ)を作成します。
タイプはファイアウォールです。

メンバーに先ほど作成したユーザを登録して完了です。

手順3:ポリシー設定

通常通りポリシーを作成します。

送信元にインターネット側からの送信元を通常通り設定します。
全て許可する場合はallですね。

更に、この送信元に先ほど作成したユーザグループを追加します。

終わりです。

これで後はブラウザでアクセスしてみましょう。

画面にForigateのログイン画面が表示され、先ほど作成したユーザ名とパスワードでログインを行います。

この後は、SSHなども利用できるようになります。

細かな設定は端折りましたが、これをやりたい人は既にポリシー設定などやったことがある方だと思いますので、十分に判って頂けると思っています。

この設定も凄く簡単ですね。

最後に

SSHでインターネット側からサーバへアクセス出来る様にすると、SSH BruteForce攻撃に会って面倒なんですよね。IPS攻撃もガッツリやってきます。

この方法では、通常のブラウザで一度認証を行ってから、SSHによるアクセスを行います。

その為、ポートフォワーディングなどでデフォルトポートを変更して逃げているだけではポートスキャンされて見つかってしまう・・・という悩みにも、対処が出来るということになります。

いや~実際、この方法を探し回っていたのですが、なかなかネットで見つからなくて、サポートに聞いたら英文の古いインタフェースマニュアルが・・・何やってるのか良く分からない感じだったのですが、やってみるとこれで良いんか?
すっげー楽でした。

このページを見ている方は、セキュリティ関連で苦労されている方だと思いますが、お互い大変ですね。
頑張ってセキュリティ対策しましょう!

FortiGateでポートフォワーディング

セキュリティの観点から、ポートフォワーディングを行いたい時があります。
サーバ側でポートを変更する対策も考えられるところなのですが、イントラ環境ではデフォルトポートで、外部とはポートフォワーディングしたいという時があります。
そういう時は、ルータでポートフォワーディングすることもありますが、今回はUTM(FortiGate)側で対応を行います。

「ポリシー&オブジェクト」→「バーチャルIP」で、バーチャルIPを編集します。

「ポートフォワード」を有効にします。
「Externalサービスポート」に外部からアクセスするポート番号を指定します。
「ポートへマップ」にフォワードする先のポート番号を指定します。

Vulsによる脆弱性の検査

はじめに

今回はVulsを用いた脆弱性の検査を行う。
対象とするシステムはCentOS 7とする。
また、本サイトは個人運営のため、メンテナンスが不十分であり対象パッケージのアップデートに追従できていないことに注意!

流れは以下の通り。

  • Vulsインストールの下準備
  • 脆弱性情報の準備
  • Vulsによる脆弱性の検査
  • 可視化

以上について順を追って記載する。
オフィシャルなインストール方法は以下のURLに示されており、参考にしている。
https://vuls.io/docs/en/install-manually-centos.html

Vulsインストールの下準備

実行ユーザの作成

Vulsを実行するユーザの作成を行う。

sudoを許可するためにvisudoでユーザに許可をします。

セキュリティ確保の為、不要なユーザによるsudoを許可したくない場合には、作業終了後に上記の内容を削除する。
※継続的なモニタリングを行う場合には、残しておく必要あり。

ログ格納用ディレクトリの作成

vulsのログを格納するディレクトリを作成する。

go環境のインストール

以下のサイトからパッケージをダウンロードする。

https://golang.org/dl/

本資料作成時点における最新バージョンは1.12でしたので、以下のコマンドを実行し解凍する。

goの環境変数を設定する。
/etc/profile.d/goenv.shを新たに作成する。

ここでvulsの実行ユーザでgo環境の確認を行う。

環境変数を読み込む。

バージョンが正しく表示されていれば、goのインストールは成功している。

脆弱性情報の準備

NIST(アメリカ国立標準技術研究所)が提供するNVDと、IPA(情報処理推進機構)が提供するJVNから脆弱性情報を取得する。

gitのサイトを覗いてみると、どうも日本人の方がまとめてくれているみたいですね。感謝!

今度は、Linuxのディストリビュータが提供されているOVALも取得する。

各データベースを構築する。

NVDのデータベースを構築する。
相当古い情報から取得するので、時間は結構かかる。
オフィシャルのインストールマニュアルには、AWSで10分程度となっていたが、1〜2時間程度は覚悟した方が良さそう(^^;
出力さているログを見ていると、西暦が記されたファイルがちらほら見受けられるので、進捗状況が分かると思う。

JVNのデータベースを構築する。

こちらは更に古くて1998年以降のデータベースになる。
オフィシャルのインストールマニュアルには、こちらもAWSで10分程度とされているが、実際どれだけかかるのか。。。
2005年のデータまでは比較的速やかに登録が進むのだが、2006年くらいからいきなり重くなる(^^;
日本では2006年くらいから本気で取り組みを始めたということなのだろうか?(笑)

OVALのデータベースを構築する。

ここからはある意味でオプションデータベースみたいな感じもするけど、オフィシャルマニュアルに記載があるので、合わせて登録する。

gostのデータベースを構築する。
これまでよりは少し短い時間で構築できるが、それも10分程度は覚悟。
ディストリビューたから脆弱性に関するパッチが提供されていないものを検出出来るとのこと。

Exploitのデータベースを構築する。
エクスプロイトコードを表示出来るExploit DBがVuls 0.6.0から提供されているので、それを使いたい場合に追加する。ここもオフィシャルマニュアルの丸コピ


Vulsのインストール

データベースの準備が整い、これからVulsのインストールを行う。
ここは、オフィシャルマニュアルを丸コピ!
※Vulsを再インストールするとかアップデートする際には、ここでインストールするソースを含めた生成物を削除する必要があるらしい。方法については後述する「Vulsのアップデート」に記したが、オフィシャルマニュアルも合わせて確認すること。

Vulsの設定ファイルを作成する。

設定ファイルの確認を以下のコマンドで行う。

エラーが表示されなければ完了である。

Vulsによる脆弱性の検査

ローカルスキャンの方法を記載する。
ローカルスキャン以外にもリモートスキャンを行う方法等も準備されているので、必要に応じてセットアップなどを行ってやってみるのも良いかと思う。
ローカルスキャンのコマンドは至ってシンプルで以下のコマンドで実施する。

Vulsのアップデート(新規インストール時は不要)

Vulsをアップデートする時は、実行モジュールとソースを全削除してから行うらしい。
ということで、ここで記載する内容は、Vulsをアップデートする際に行う事前作業であり、新規インストール時には必要ない。

スキャン結果の確認

スキャン結果を確認してみる。
困ったことに、-format-short-textオプションが使えなくなっているみたい。
オフィシャルマニュアルにはまだその記載があるのだが、諦めて他の出力結果を試してみる。

デフォルトの出力結果を出してみた。
コマンドは以下の通り。

ちなみに、この時点で-lang=jaは全く意味が無かった(笑)
日本語が出てくれることを期待しただが。。。結果は以下の通り

Total: 200 (High:49 Medium:133 Low:18 ?:0),
全体で200の脆弱性を確認している。
各レベルに対応した数値が提示されている。

199/200 Fixed
200件中199件でアップデートパッケージが提供されている。

後の説明は省略。。。。

表は、それぞれの脆弱性に関するレポートが示される。

TUI形式で表示することも可能。

終了は、Ctrl+Cで行う。

VulsRepoを用いた解析方法などもあるようだが、今回はここまで。