たれながし.info

とあるITエンジニアの備忘録

FortiGateのSSL-VPNにAzureADのSAML認証で接続する

FortiGateのSSL-VPNSAML認証します。IdpはAzureADを使います。

f:id:tarenagashi_info:20201129042523p:plain

はじめに

目的

FortiGateのSSL-VPNSAML認証に対応しているので、AzureADのSAML認証で接続してみます。
FortiGateはv6.2.0から、FortiClientはv6.4.0からSSL-VPNSAML認証に対応したらしいです。(ちなみに、FortiGateのWeb管理画面のSAML認証もv6.2.0から対応)

検証構成

f:id:tarenagashi_info:20201129042523p:plain

  • FortiGate:Azure上に構築したVM版のv6.4.3
  • AzureAD:デフォルトの「onmicrosoft.com」ドメイン
  • クライアント:Windows10 Home + FortiClientv6.4.1

※オンプレのFortiGateを持っていないので、Azure上に構築したVM版のFortiGateを使っています。
 AzureへのFortiGate-VMの構築方法は「AzureにFortiGate-VM構築してみた」を参照してください。

AzureADの設定

エンタープライズアプリケーションの追加

AzureADへ「エンタープライズアプリケーション」を追加します。

AzureポータルでAzureADを開き、エンタープライズアプリケーションをクリック
f:id:tarenagashi_info:20201129045604p:plain

新しいアプリケーションをクリック
f:id:tarenagashi_info:20201129045643p:plain

「fortigate」を検索し「FortiGate SSL VPN」「作成」をクリック
f:id:tarenagashi_info:20201129045733p:plain

SAMLの設定

AzureADに追加したSaaSアプリにSAMLの設定をします。

シングルサインオンの設定をクリック
f:id:tarenagashi_info:20201129052333p:plain

SAMLをクリック
f:id:tarenagashi_info:20201129052413p:plain

基本的なSAML構成を編集する
f:id:tarenagashi_info:20201129052529p:plain

項目 URL
[識別子] https://[FQDN]/remote/saml/metadata
[応答URL] https://[FQDN]/remote/saml/login
[サインオンURL] https://[FQDN]/remote/login
[ログアウトURL] https://[FQDN]/remote/saml/logout

※[FQDN]は、SSL-VPNで使うFortiGateのFQDN or グローバルIP
 SSL-VPNに443以外を使う場合は適宜ポート番号を付けてください

ユーザー属性とクレームの「編集」をクリック
f:id:tarenagashi_info:20201129052624p:plain

「新しいクレームの追加」から「username」を追加する
f:id:tarenagashi_info:20201129054541p:plain

名前 ソース属性
username user.userprincipalname

既存設定の「users.group[SecurityGroup]」をクリックする
「グループ要求の名前をカスタマイズする」をチェックし名前を「group」に設定し「保存」する
f:id:tarenagashi_info:20201129054714p:plain

「username」「group」があることを確認します。
この2つ以外は不要なので消しても良いみたいです。
f:id:tarenagashi_info:20201129055446p:plain

証明書 (Base64)をダウンロードする
「FortiGate SSL VPNのセットアップ」に表示される3つのURLをメモする
f:id:tarenagashi_info:20201129055700p:plain

ユーザーの作成とアプリの割り当て

接続に使用するユーザを作成し、アプリを割り当てます。
グループに対してアプリを割り当てることも可能ですが、AzureAD Premium(有料ライセンス)が必要になります。

ユーザーの作成

AzureADにユーザーを作成する
f:id:tarenagashi_info:20201129062742p:plain

アプリの割り当て

Azureポータルで「エンタープライズアプリケーション」の「FortiGate SSL VPN」をクリック
f:id:tarenagashi_info:20201129062050p:plain

「ユーザーとグループの割り当て」をクリックする
f:id:tarenagashi_info:20201129062241p:plain

「ユーザーの追加」から追加する
f:id:tarenagashi_info:20201129062344p:plain

セキュリティグループの作成

ユーザー認証に使用するセキュリティグループ「FortiGateAccess」を作成し、ユーザーを追加します。
作成したグループの「オブジェクト ID 」を後ほどFortiGateへ設定します。

AzureADでセキュリティグループ「FortiGateAccess」を作成する
FortiGateの設定に使うので「オブジェクトID」をメモしておきます。
f:id:tarenagashi_info:20201129062935p:plain

作成したグループにユーザーを追加する
f:id:tarenagashi_info:20201129063020p:plain

FortiGateの設定

証明書のインポート

システム > 証明書 > インポート > リモートから「Base64 SAML 証明書」をインポートする
証明書の名前「REMOTE_Cert_1」をメモしておきます。
f:id:tarenagashi_info:20201129063517p:plain

SAMLの設定

FortiGateにSSH接続し、下記コマンドを実行します。

config user saml
 edit azure
  set entity-id [SP 識別子]
  set single-sign-on-url [SP 応答URL]
  set single-logout-url [SP ログアウトURL]
  set idp-single-sign-on-url [IdP ログインURL]
  set idp-entity-id [IdP AzureAD識別子]
  set idp-single-logout-url [IdP ログアウトURL]
  set idp-cert [Base64 SAML 証明書名]
  set user-name username
  set group-name group
end

[SP...][IdP...]は「AzureADの設定」でメモしたものに置き換えます。

注意点
[IdP ログアウトURL]は「https://login.microsoftonline.com/common/wsfederation?wa=wsignout1.0」となり、「?」を含みます。「?」はFortiGateで特別な文字として扱われるので、そのままでは入力できません。よって、「?」の直前まで入力した後、一度「Ctrl+V」を押します。すると「?」を入力できます。
f:id:tarenagashi_info:20201129064031p:plain

グループ設定

AzureADで作成したグループ「FortiGateAccess」をFortiGateに設定します。

config user group
 edit FortiGateAccess
  set member azure
  config match
   edit 1
    set server-name azure
    set group-name [オブジェクトID]
   next
  end
 next
end

SSL-VPN設定

SSL-VPNを443で提供したいので、Web管理画面のポート番号を10443に変えます。
f:id:tarenagashi_info:20201129064156p:plain

SSL-VPNの設定を行います。 ※とりあえずSSL-VPNが繋がる設定だけする
f:id:tarenagashi_info:20201129064312p:plain
f:id:tarenagashi_info:20201129064323p:plain

ポリシーを作成します。
f:id:tarenagashi_info:20201129064408p:plain

動作確認

SAML認証の動作確認

SSL-VPNを許可したユーザーでアプリパネルにアクセスする
「FortiGate SSL VPN」をクリックする
f:id:tarenagashi_info:20201129064832p:plain

FortiGateの「SSL-VPN Portal」にアクセスできたら成功です。
f:id:tarenagashi_info:20201129065021p:plain

FortiClientでの動作確認

公式サイトから、最新のFortiClientVPNをDLしてインストールします。
f:id:tarenagashi_info:20201129044951p:plain

起動し、VPN接続設定をします。
「Enable Single Sign On(SSO) for VPN Tunnel」をチェックします。
f:id:tarenagashi_info:20201129044129p:plain

VPNに接続します。
f:id:tarenagashi_info:20201129044143p:plain

証明書のエラーが表示されるので「OK」します。
f:id:tarenagashi_info:20201129044334p:plain

AzureADの認証画面が表示されるのでサインインします。
f:id:tarenagashi_info:20201129044441p:plain

SSL-VPN接続完了です。
f:id:tarenagashi_info:20201129044518p:plain

※接続途中にステータスが40%程度で停止した場合、FortiClientに隠れて証明書の確認ダイアログが表示されている場合があります。その場合、ダイアログを前面に表示し「OK」を押します。(初回のみ表示されると思われます。)

AzureにFortiGate-VM構築してみた

AzureマーケットプレイスにあるFortiGate-VMがどんなものか構築してみました。

AzureマーケットプレイスのFortiGate

Azureマーケットプレイスで「fortigate」と検索すると、4つヒットしました。

4つの内、2つがシングル構成のFortiGate-VMになります。

  • 「FortiGate NGFW - Single VM with ARM Template」 ← こっちを使う
  • 「Fortinet FortiGate Next-Generation Firewall

OS用/ログ用でディスクが分かれていたり、内部/外部用にネットワークIFが2つあったりと使いやすい構成になっているので「FortiGate NGFW - Single VM with ARM Template」を使います。

(「Fortinet FortiGate Next-Generation Firewall」は、ディスクとネットワークIFがそれぞれ1つでしたが、構築時や構築後に追加できると思います。)

ちなみに、「FortiGate NGFW for Azure LB HA with ARM template」はAzureロードバランサーを使ったHA構成、
「FortiGate SSL VPN」はFortiGateへのSSL-VPN接続でSAML認証するためのAzureADアプリになります。

構築

では、構築していきます。

Azureポータル/マーケットプレイス

Azureポータルマーケットプレイスでforigateを検索し
「FortiGate NGFW - Single VM with ARM Template」を選択する。

作成をクリックする。
30日無料とあるので、PAYG(従量課金)で構築します。

基本

仮想マシン名やリージョンを選択します。

LicenseでOSバージョン、ライセンスタイプを選択できます。
今回は「PAYG 6.4.3」を選択します。
PAYGは従量課金、BYOLは購入したライセンスファイルを仮想マシンに適用する形態です。

仮想ネットワーク/インタンスタイプ


パブリックIPアドレス


確認および作成


デプロイ完了

デプロイ完了に掛かった時間は5分程度でした。

リソース確認

作成されたリソースを確認します。

可用性セット


NSG

受信も送信も全許可になっています。

ルートテーブル


ネットワークIF

Port1(外部)/Port2(内部)の2つ作成されます。

ディスク

OS用/ログ用の2つ作成されます。

用途 ディスク構成 パフォーマンスレベル
OS 2 GiB (Premium SSD) P1 - 120 IOPS、25 Mbps
ログ 30 GiB (Premium SSD) P4 - 120 IOPS、25 Mbps


仮想ネットワーク


パブリックIPアドレス

SKUは「Basic」でした。

動作確認

Web管理画面

https://[グローバルIP]に接続する。

システムステータス


FortiGate # get system status
Version: FortiGate-VM64-AZURE v6.4.3,build1778,201021 (GA)
Virus-DB: 1.00000(2018-04-09 18:07)
Extended DB: 1.00000(2018-04-09 18:07)
Extreme DB: 1.00000(2018-04-09 18:07)
IPS-DB: 6.00741(2015-12-01 02:30)
IPS-ETDB: 6.00741(2015-12-01 02:30)
APP-DB: 6.00741(2015-12-01 02:30)
INDUSTRIAL-DB: 6.00741(2015-12-01 02:30)
Serial-Number: FGTAZROTNTBQZ7B4
IPS Malicious URL Database: 1.00001(2015-01-01 01:01)
License Status: Valid
VM Resources: 4 CPU, 8005 MB RAM
VM Instance ID: b411d42b-474b-4862-a62f-aa9df9dc20c9
Log hard disk: Available
Hostname: FortiGate
Operation Mode: NAT
Current virtual domain: root
Max number of virtual domains: 1
Virtual domains status: 1 in NAT mode, 0 in TP mode
Virtual domain configuration: disable
FIPS-CC mode: disable
Current HA mode: standalone
Branch point: 1778
Release Version Information: GA
FortiOS x86-64: Yes
System time: Fri Nov 27 03:47:37 2020

ディスク構成


FortiGate # get hardware status
Model name: FortiGate-VM64-AZURE
ASIC version: not available
CPU: Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz
Number of CPUs: 4
RAM: 8005 MB
Compact Flash: 2056 MB /dev/sda
Hard disk: 30720 MB /dev/sdc

ライセンス状態

ライセンス認証が完了していて、ステータスも「valid」です。

期限は「expiration: Fri Jan 1 2021」となっています。
本日は2020/11/27なので、残り35日です。

FortiGate # get system fortiguard
fortiguard-anycast  : enable
fortiguard-anycast-source: fortinet
protocol            : https
port                : 443
load-balance-servers: 1
auto-join-forticloud: disable
update-server-location: usa
sandbox-region      :
antispam-force-off  : disable
antispam-cache      : enable
antispam-cache-ttl  : 1800
antispam-cache-mpercent: 2
antispam-license    : Contract
antispam-expiration : Fri Jan  1 2021
antispam-timeout    : 7
outbreak-prevention-force-off: disable
outbreak-prevention-cache: enable
outbreak-prevention-cache-ttl: 300
outbreak-prevention-cache-mpercent: 2
outbreak-prevention-license: Trial
outbreak-prevention-expiration: Fri Jan  1 2021
outbreak-prevention-timeout: 7
webfilter-force-off : disable
webfilter-cache     : enable
webfilter-cache-ttl : 3600
webfilter-license   : Contract
webfilter-expiration: Fri Jan  1 2021
webfilter-timeout   : 15
anycast-sdns-server-ip: 0.0.0.0
anycast-sdns-server-port: 853
sdns-options        :
source-ip           : 0.0.0.0
source-ip6          : ::
proxy-server-ip     : 0.0.0.0
proxy-server-port   : 0
proxy-username      :
proxy-password      : *
ddns-server-ip      : 0.0.0.0
ddns-server-port    : 443
interface-select-method: auto

ネットワークIF


FortiGate # get system interface physical
== [onboard]
        ==[port1]
                mode: static
                ip: 10.0.0.4 255.255.255.0
                ipv6: ::/0
                status: up
                speed: 50000Mbps (Duplex: full)
        ==[port2]
                mode: static
                ip: 10.0.1.4 255.255.255.0
                ipv6: ::/0
                status: up
                speed: 50000Mbps (Duplex: full)

Static Routes


FortiGate # get router info routing-table static
Routing table for VRF=0
S*      0.0.0.0/0 [10/0] via 10.0.0.1, port1
S       10.0.0.0/16 [10/0] via 10.0.1.1, port2
S       168.63.129.16/32 [10/0] via 10.0.0.1, port1

WSL2でWin-KeX(Kali LinuxのGUI環境)を使ってみた

Kali Linuxに、Win-KeXという機能が実装されたので試してみました。

Win-KeXとは

WSL2でKali LinuxGUIが使用できる機能です。
Kali Linux 2020.3で実装されました(2020年8月リリース)。

導入手順

WSL2の導入

事前にWSL2を導入しておきます。

Kali Linuxのインストール

MicrosoftストアからKali Linuxをインストールする
f:id:tarenagashi_info:20201123043945p:plain:h240

Kali Linuxの起動

インストールが完了したら、「起動」をクリックする
f:id:tarenagashi_info:20201123044035p:plain:h240

コンソールが開くので、ユーザを作成する
f:id:tarenagashi_info:20201123044133p:plain

OSアップグレード

sudo apt update
sudo apt upgrade

dbus-x11のインストール

sudo apt -y install dbus-x11

KeXのインストール

sudo apt -y install kali-win-kex 


インストール中にキーボード設定画面が開くので、「Japanese(OADG 109A)」を選択する
f:id:tarenagashi_info:20201123034712p:plain:w240f:id:tarenagashi_info:20201123034727p:plain:w240

KeXの起動

初回起動時はVNCのパスワードを設定します。「view-only password」は設定しなくても問題ないです。

$ kex -m
Password:
Verify:
Would you like to enter a view-only password (y/n)? n

Winモード(Windowsモード)

起動したKeXにtigervncで接続します。

kex -m
kex --win -m

「--win」オプションを省略すると、Winモードで起動する
「-m」を省略した場合、全画面表示になる
f:id:tarenagashi_info:20201123043628p:plain:h240

SLモード(シームレスモード)

KeXがシームレスに起動します。Kali Linuxツールバーが画面上部に表示されます。

kex --sl

f:id:tarenagashi_info:20201123043731p:plain:h240

Enhanced Sessionモード

起動したKeXにRDPで接続します。

kex --esm

f:id:tarenagashi_info:20201123043716p:plain:h240

音声サポート

「-s」を付けると音声がサポートされます。

kex -m -s
kex --sl -s
kex --esm -s

KeXの終了

「kex --stop」「kex--kill」で終了します。
KeXサーバが起動しているときに「kex --stop」で終了できます。KeXサーバが起動しているかは「kex --status」で確認します。

「kex --stop」で終了

$ kex --status

Win-KeX server sessions:

X DISPLAY #     RFB PORT #      PROCESS ID
:1              5901            1108

You can use the Win-KeX client to connect to any of these displays.

$ kex --stop
Killing Win-KeX process ID 1108... success!

「kex --kill」で終了

$ kex --status

Error connecting to the KeX server.
Please try "kex start" to start the service.
If the server fails to start, please try "kex kill" or restart your WSL2 session and try again.

$ kex --kill

VNCパスワード変更

「kex --passwd」で変更できます。

kex --passwd

ハマりポイント

KeXのインストールと起動で私がハマったポイントと解決方法になります。

「Unable to contract settings server」と表示され接続できない。

f:id:tarenagashi_info:20201123035638p:plain:h180

Unable to contract settings server 
Failed to execute child process "dbus-launch" (No such file or directory)

dbus-x11」をインストールして、KeXを再起動します。

$ sudo apt -y install dbus-x11
$ kex --kill
$ kex -m -s

SLモードが起動しない。

以下のように表示され、SLモードが起動しない状態です。

$ kex --sl
        Checking /home/test/.cache/sessions/xfce4-session-192.168.206.1:0
        Enabling SL mode
        Desktop started after 1 seconds, enabling transparency now
Unable to init server: Could not connect: Connection refused
Failed to parse arguments: Cannot open display:
...

$ kex --sl
        Checking /home/test/.cache/sessions/xfce4-session-192.168.206.1:0
        Enabling SL mode
        Waited 100 seconds for desktop, giving up
        Saving Win-KeX SL session
        Started Win-KeX SL

Windows Defenderファイアウォールで「vcxsrv.exe」の「パブリックネットワーク」を許可します。
f:id:tarenagashi_info:20201123040458p:plain:h180 f:id:tarenagashi_info:20201123035214p:plain:h180

WinモードでKali Linuxツールバーが表示されない

Winモード&全画面&マルチディスプレイだと表示されない時があります。マルチディスプレイを解除すると表示されます(HDMIケーブルを抜く)。

KeXからログアウトすると画面が真っ暗になる

Winモード&全画面の時発生します。Ctrl+Alt+Delから「tigervnc」を終了します。

TrivyでCentOSの脆弱性をスキャンしてみた

Trivyという脆弱性スキャナをCentOSにインストールして、スキャンしてみました。
TrivyはOSやコンテナイメージの脆弱性(CVE)をスキャンして表示してくれます。

検証環境

CentOS 7.9

Trivyのインストール

CentOSにはリポジトリを作成してインストールするか、rpmをダウンロードしてインストールします。リポジトリを作成する方が簡単なので、そちらで行きます。

sudo cat << 'EOS' > /etc/yum.repos.d/trivy.repo
[trivy]
name=Trivy repository
baseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/$releasever/$basearch/
gpgcheck=0
enabled=1
EOS

sudo yum -y install trivy

スキャンの実行

脆弱性スキャン

初回スキャンはDBの更新があるので時間が掛かります。DBは20MB程度あります。

trivy fs /

f:id:tarenagashi_info:20201123001049p:plain

未修整の脆弱性を無視してスキャン

未修整の脆弱性は無視します。

trivy fs --ignore-unfixed /

f:id:tarenagashi_info:20201123001114p:plain

json形式&ファイル出力

json形式で出力すると、CVSSスコアやCVEの詳細が確認できます。
※デフォルトの出力形式は「table」

trivy fs -f json -o result.json /

[f:id:tarenagashi_info:20201123001128p:plain

コンテナイメージのスキャン

trivy i [イメージ名]

ノートPCのM.2 SSDを換装してOSとデータを移行してみた

ノートPCのディスクの空きが足りなくなってきたので、「M.2 SSD」を256GB→1TBへ換装しました。
OS含むデータも移行します。

移行環境

  • PC環境
    • ノートPC:ThinkPad L390
    • OS: Windows10 Home(64bit)
    • M.2 SSD(換装前):WDC PC SN720 SDAQNTW-256G-1001(256GB)
  • 準備したもの
    • M.2 SSD(換装後):WD Blue SN550 NVMe WDS100T2B0C(1TB)
    • NVMe↔USB変換ケース:ELUTENG M.2 SSD ケース USB C to M.2 アダプタ
    • 移行ツール:AcronisTrueImage WDEdition 24.0.1.28080


※M.2 SSDは換装前/換装後共にNVMe対応
※M.2↔USB変換ケースは、NVMeのみ対応(NVMe/SATA両対応のものは無かった)
(NVMeのみ対応が4,000円弱、SATAのみ対応が2,000円弱でした)

NVMeとSATAについて

  • M.2は物理規格のこと(接続端子やサイズなどを定義している)
  • NVMe(NVM Express)やSATAというのは論理規格(他にAHCIていうのもある)
    NVMeの方が高速だが電力消費が大きい

性能的に優れているので、特別な理由がなければ「NVMe」を使用するのが一般的

変換ケース組み立て

M.2 SSD↔USB変換ケースにSSDを組み入れます。ケースはNVMeとUSB3.1 Gen2を変換します。水色のやつは、振動を軽減する緩衝材でテープで張り付けて使います。

f:id:tarenagashi_info:20201115143406j:plain

ケースについて

ELUTENGという中国の深センのメーカーの物です。アルミ金属製でカッチリしてて良いですが、付属ドライバーのサイズが合ってなくて空回りしてネジ頭がバカになりやすいです。
Amazonで3,599円でした(200円引きクーポン適用)、SATAのみ対応版だと1,500円位です。

ELUTENG - Hard Drive Accessories / M.2 Enclosures
http://www.eluteng.com/module/hardDrive/m2/details010.html

SSDについて

WD Blueの1TBのものです。
Amazonで12,800円でした。Kakaku.comの最安が12,799円なので価格的にも満足です。

OSとデータの移行

「AcronisTrueImage WDEdition」を使用して移行します。

AcronisTrueImageのダウンロードとインストール

WDの製品サポートページからダウンロードします。

1. WDの製品サポートページに接続する
ソフトウェアおよびファームウェアのダウンロード | WD サポート

2. ソフトウェアをダウンロードする
f:id:tarenagashi_info:20201114181259p:plain

3. ダウンロードしたzipを解凍してexeを実行する
※ディスクの空きが少ないとインストールが失敗します。2GB程度の空きでも失敗したので5GB空けて実施しました。

f:id:tarenagashi_info:20201114181602p:plain

4. インストールが完了したらアプリを起動します。

データの移行(ディスクのクローン)

ツールからディスクのクローンを選択する

1. 「ツール」 > 「クローンディスク」を選択する

f:id:tarenagashi_info:20201115140256p:plain

2. モードを選択する
※「自動」で実施したんですけど、「手動」だとパーティションサイズなどが設定できるようです。

f:id:tarenagashi_info:20201115140639p:plain

3. ソースディスクを選択する

f:id:tarenagashi_info:20201115140818p:plain

4. ターゲットディスクを選択する

f:id:tarenagashi_info:20201115140944p:plain

5. 実行する

f:id:tarenagashi_info:20201115141052p:plain

クローンに掛かった時間は10分程度でした。
常時400MB/sの速度が出ていました。


クローンをしてみて気になった点

  • 完了のポップアップが画面最前面に出ないので、クローンが完了しても気付きにくい
  • クローン中にソースディスクに行った変更がターゲットディスクに変更されません。
    クローン開始時にソースディスクにロックが掛かるからかな?
  • クローン完了後にCドライブが自動拡張されていました。
    モードで「手動」を選択すれば制御可能と思われる
  • 回復パーティションの文字が消えていました。
    コマンドで見ると、回復パーティションとして認識はされていそうなので今回は放っておくことにしますが、本当は対処した方が良いのかも

f:id:tarenagashi_info:20201115142201p:plain

>reagentc /info
Windows 回復環境 (Windows RE) およびシステム リセット構成
情報:

    Windows RE の状態:         Enabled
    Windows RE の場所:         \\?\GLOBALROOT\device\harddisk0\partition4\Recovery\WindowsRE
    ブート構成データ (BCD) ID: 8341862b-6691-11ea-a7ac-cc78be3bc177
    回復イメージの場所:
    回復イメージ インデックス: 0
    カスタム イメージの場所:
    カスタム イメージ インデックス: 0

>diskpart
DISKPART> select disk 0
DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    予約                 128 MB    17 KB
  Partition 2    システム               260 MB   129 MB
  Partition 3    プライマリ              930 GB   389 MB
  Partition 4    回復                1001 MB   930 GB

AcronisTrueImageの削除

Acronisをインストールしたことで不具合がいくつか発生したので、移行完了後削除しました。
Boujourもインストールされているので、合わせて削除します。削除完了後はPCの動作も元に戻りました。

  • PCの動作が重くなり、冷却ファン頻繁に動くようになった
  • ファイルの保存に時間が掛かるようになった
  • いくつかのプロセスが常に動いていて気持ち悪い

f:id:tarenagashi_info:20201114180745p:plain

exeファイルと証明書を作成してデジタル署名を付与してみる

Capcomランサムウェアの被害にあったとニュースがありました。

犯人は「Team of Ragnar Locker」と自称していて、使用されたランサムウェアも「Ragnar Locker」と呼ばれているようです。
そして三井物産セキュアディレクションのブログにCapcomで使われたランサムウェアの解析結果が掲載されていて、exeファイルにデジタル署名が付与されていると記載がありました。
署名情報の画像も載っていて、ロシアの有限会社の署名&GlobalSignの正規の証明書でした。


マルウェアにデジタル署名が付与されていることはよくあるそうで、2010年のF-Secureのブログにもデジタル署名されたマルウェアの話が載ってました。
(盗んだ証明書使ったり、署名情報をコピペするらしい(コピペの場合、認証(って言うのか?)は通らない))


ということで、exeファイルのデジタル署名に興味を持ったので、exeファイルと証明書を作成してデジタル署名の付与を試してみた。

環境

exe作成:Visual Studio Community 2019(C++
証明書作成:OpenSSL1.0.2
署名ツール:SignTool.exe ※Visual Studioに付属

exeの作成

MessageBoxを表示するだけのexeファイルを作成する。

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
    MessageBox(NULL, TEXT("Hello, world!"), TEXT("Hello"), MB_OK | MB_ICONINFORMATION);
    return 0;
}

作成したexeの実行結果
f:id:tarenagashi_info:20201114022605p:plain

証明書の作成

OpenSSLで証明書を作る。自己署名証明書にしました。
証明書を作成したら、PKCS#12(pfx)に変換する。

openssl genrsa 2048 > server.key
openssl req -new -key server.key > server.csr
openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt
openssl pkcs12 -export -inkey server.key -in server.crt -out server.pfx

作成した証明書(Subject名は適当)

f:id:tarenagashi_info:20201113231222p:plain

デジタル署名の付与

「SignTool.exe」でexeに署名を付与する。
「SignTool.exe」はVisual Studioに付属のものを使います。

signtool.exe sign /f server.pfx /t http://timestamp.digicert.com msgbox.exe
Done Adding Additional Store
Successfully signed: msgbox.exe

「/t <URL>」オプションを付けると署名時刻が付くようです。
署名者の情報の「電子メール」欄は、証明書のサブジェクト情報となりました。(CSR作成時に設定したもの)

f:id:tarenagashi_info:20201114001137p:plain

「/t <URL>」オプションを付けない場合、署名時刻はなし(利用不可と表示)となりました。

f:id:tarenagashi_info:20201114001232p:plain

ファイルサイズは下記の通りでした。
「署名なし」 <「 署名あり(timestampなし) < 「署名あり(timestampあり)」

exeタイプ ファイルサイズ(Byte) サイズ増(Byte)
署名なし.exe 9,216 -
署名あり(timestampなし).exe 10,736 +1,520
署名あり(timestampあり).exe 14,656 +3,920

PEファイルのフォーマット

証明書、署名情報は「Attribute Certificate Table」に格納されるようです。
「Attribute Certificate Table」はセクションの後ろに付くようです。

f:id:tarenagashi_info:20201114020823p:plain

PE Format
PE Format - Win32 apps | Microsoft Docs

Windows Authenticode Portable Executable Signature Format
https://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Authenticode_PE.docx

感想

デジタル署名の「電子メール」がCSR作成時に設定した「メールアドレス」となることが分かりました。
Capcomで使用されたランサムウェアはGlobalSignの正規の証明書で署名されているので、デジタル署名に記載されているメールアドレスは証明書発行時点(2020/06/09)では存在していたということでしょうか。
2020/11/14時点、DNSレコードを検索しても該当のドメインは見つかりませんでした。ググって調べた情報だと、2020/10/12頃はAレコードは引けていたようです。

f:id:tarenagashi_info:20201114025211p:plain
f:id:tarenagashi_info:20201218164757p:plain

クラウド上のデータが消失して復旧不能になった「ふくいナビ」のドメイン、サーバ情報を調べてみた

2020/11/1? or 2?に発生した『サーバ管理会社が契約更新ミス 「ふくいナビ」全データがクラウドから消失、復旧不能に』というネットニュースを見て、何か悲しい気持ちになったので「ふくいナビ」とサイトを運営する「公益財団法人ふくい産業支援センター」について調べてみた。

www.itmedia.co.jp

データ消失の原因

NECキャピタルソリューションの社内手続きのミスで更新の手続きがされておらず、貸与期間が終了したとして全データが削除された。

ふくいナビ

ふくいナビは「公益財団法人ふくい産業支援センター」が運営する「福井の企業支援施策を見つけるためのポータルサイト

facebookhttps://www.facebook.com/fukuinavi/
URL:https://fukui-navi.gr.jphttps://www.fukui-navi.gr.jphttps://fnavi.fukui-navi.gr.jp

ドメイン情報

DNSレコードの内容は下記の通り(2020/11/09時点)。

Host Type Value Remarks
fukui-navi.gr.jp SOA primary name server = dns.fisc.jp
responsible mail addr = postmaster.fisc.jp
serial = 2016051000
refresh = 10800 (3 hours)
retry = 1800 (30 mins)
expire = 2592000 (30 days)
default TTL = 10800 (3 hours)
NS dns.fisc.jp ミテネインターネット
NS nsx2.mitene.ad.jp ミテネインターネット
MX fnavi.fukui-navi.gr.jp ← 消失 [組織名]NEC/サービスデリバリ事業部
A 202.225.138.47 ← 消失 [組織名]NEC/サービスデリバリ事業部
www A 202.225.138.47 ← 消失 [組織名]NEC/サービスデリバリ事業部
fnavi A 202.225.138.47 ← 消失 [組織名]NEC/サービスデリバリ事業部

サーバ情報

Shodanで見るとTCP80,443,25が開いていたので、Webサーバとメールサーバ(兼MLサーバ?)が消失したと思われる。WebサーバはApacheだったもよう。
f:id:tarenagashi_info:20201109202941p:plain

WebArchive

WebArchiveには2020/9/23のものが残っていて、PHPを使用したサイトでした。
https://web.archive.org/web/20200923180350/https://fukui-navi.gr.jp/
f:id:tarenagashi_info:20201109211044p:plain

公益財団法人ふくい産業支援センター

「公益財団法人ふくい産業支援センター」は福井県の産業、個人/中小企業の企業家を支援する公益法人

URLは「https://www.fisc.jp/

ドメイン情報

DNSレコードの内容は下記の通り。
「ふくいナビ」とは異なり、NEC関連ではなく「ミテネインターネット」のサービスを使っている。
「ミテネインターネット」は福井市に本社を置く株式会社で、三谷商事・福井ケーブルテレビの子会社らしい。
https://ja.wikipedia.org/wiki/ミテネインターネット

Host Type Value Remarks
fisc.jp SOA responsible mail addr = postmaster.fisc.jp
serial = 2020030401
refresh = 10800 (3 hours)
retry = 1800 (30 mins)
expire = 2592000 (30 days)
default TTL = 86400 (1 day)
NS dns.fisc.jp ミテネインターネット
NS nsx2.mitene.ad.jp ミテネインターネット
MX mx.cloudz.jp ミテネインターネット
MX mx-0.cloudz.jp ミテネインターネット
MX mx-1.cloudz.jp ミテネインターネット
www A 202.238.60.11 ミテネインターネット
dns A 202.238.60.12 ミテネインターネット