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

FortiGateでFortiTokenのアクティベーション期限を調整

FortiGateでユーザ認証にFortiTokenを設定すると、QRコードが発行されます。
QRコードを利用して有効化(アクティベーション)を行うことで、ユーザに紐付けされたFortiTokenが有効になります。

この配信されたQRコードは、デフォルトで3日(72時間)有効なのですが、土日などを挟むと操作できる時間が非常に限られます。
それもセキュリティ対策なんでしょうけどね。。。

そこで、この有効期限を延ばす方法を以下に記します。

GUIでは操作できず、CLIでの操作になります。

以下のコマンドを実行することで、最大7日まで有効期限を延長することが可能です。

ちなみに、FortiGateでCLIコマンドを利用することでメールによる二要素認証も可能になります。
詳しくは別の機会に。

FortiSwitchの基本設定

FortiSwitchを初期段階でL2スイッチと同じレベルまで使えるようにしておこうと思います。

デフォルトのままでは、ハブとしても使えなかったので、最初にデフォルトのVLANを作成します。

Network→Interface→VLAN→add VLANで新規のVLANを作成します。

デフォルトVLAN作成

設定内容は概ねこんな感じです。
IP Configuration → IP/NetworkはFortiSwitchに割り当てるIPアドレスになります。

次に、ポートへVLANを適用します。

ポートへのVLAN割当て

今回は、VLAN IDを1として作成したので、デフォルトで設定が反映されています。
1以外のVLAN IDを使用した場合には、適宜ポートへVLAN IDを設定することになります。

後は、VLANを適当に作ってゲートウェイを設定すれば動いてくれそうです。

ここからは、余談になりますが、FortiLinkを設定すれば、FortiGateの画面から設定を行うことが出来る様になるのでしょう。

その設定は、また後日やってみたいと思います。

FortiSwitch初期化後のアクセス方法

FortiSwitch 448Eが発注から10ヶ月程掛かって、やっと届きました。
電子部品が不足している昨今とは言え、辛かったです。
発注後のキャンセルは基本的にダメということだったので、そこそこ厳しかったです。

FortiSwitch 448Eの設定を行おうと付属の英文マニュアルを片手に、接続を試みました。
英文マニュアルでは、IPアドレスだけが記載されていますが、頭にhttps://を付けてあげないと接続出来ません。

https://192.168.1.99/

初期状態でのID/PWは英文マニュアルに記載がある通りになっています。

ID : admin
PASSWORD : password

いきなりFortiLinkに接続したためか設定が上手く行きませんでした。

FortiLinkで一度FortiGateとFortiSwitchを接続してしまうと、FortiSwitch側のGUI管理画面やSSHでの接続が出来ませんでした。
これは、後の設定で解決されることを祈るのですが、何も設定せずにいきなりFortiLinkに接続すると痛い目をみたというかんじです。

仕方がないので、一度工場出荷状態に戻す方法を調べて、前面の小さな穴をクリップの先で押し続けてイニシャライズします。
初期化は短時間で完了している様です。

さて、ここからが大変でした。

ログイン画面へ接続

MGMTポートにLANケーブルを接続します。
マニュアルなどの記載に従い、192.168.1.99へブラウザで接続します。
ブラウザから反応がありません。接続出来ないのです。

原因は、ブラウザでIPアドレスを指定するのではなく、下記のURLを指定する必要があります。

https://192.168.1.99/

これで接続出来ます。
最初からHTTPSでの接続が必要です。

これでも上手く接続出来ない場合は、試しにSSHで192.168.1.99へ接続すると、パスワードの更新を要求されます。
この状態になっている場合、PC側の設定などに問題があると考えられます。

入荷時のパスワードと工場出荷状態(初期化後)のパスワードは異なります!

マニュアルでは、
ID:admin
PW:password
となっていますが、工場出荷状態に初期化した場合のパスワードは異なります。
ID/PWを正しく指定してもログイン出来ません!!

実は、FortiSwitchの本体上部に貼られているシールに記載がありました。
「no password」と記載があります。
工場から出荷されて届いているはずの製品は、一度パスワードが「password」と設定されていて、初期化するとパスワードが無くなるんですね。
マニュアル記載内容は、工場出荷状態とは異なるということですね。

よって、工場出荷状態とはIDはadminのままなのですが、パスワードは無しになっています。

これが解らなくて、今時のPCからシリアル通信・・・ケーブルも無いしどうしようかと悩んでいたのですが、パスワード無しでログインすることで後の作業が元に戻りました。

以下のサイトを参考にさせて頂きました。
https://infosecmonkey.com/basic-fortiswitch-set-up/

ここを読んでいる人はほとんどいないと思いますが、ここにたどり着いた人は私と同じく苦労されているのだろうと思います。
日本語の情報がほとんどないので、ハードル高いですね。
がんばりましょう!

インターネットからのアクセス認証に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を用いた解析方法などもあるようだが、今回はここまで。