たれながし.info

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

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 ミテネインターネット

Windowsでプロセスの親子関係を確認する方法

Windowsでプロセスの親子関係を確認する方法になります。
Linuxの場合「pstree」「ps f」で確認できます。

CUIで確認

Microsoftが公開する「pslist」を使用します。

  1. 「PsTools」をダウンロードする
    https://docs.microsoft.com/en-us/sysinternals/downloads/pslist
  2. ダウンロードしたzipを解凍し「pslist64.exe」をコマンドプロンプトで実行する
    ※「-t」がプロセスツリーを表示するオプション
    ※その他オプションは上記URLを参照

Windowsの仕様で、親プロセスが先に終了した場合、子プロセスは左寄せとなりツリー表示にはなりません。
例えば、コマンドプロンプト(cmd.exe)からメモ帳(notepad.exe)を開き、コマンドプロンプト(cmd.exe)を閉じると、メモ帳(notepad.exe)は左寄せとなります。

f:id:tarenagashi_info:20201108161659p:plain:w600

GUIで確認

Microsoftが公開する「Process Explorer」を使用します。

  1. 「Process Explorer」をダウンロードする
    https://docs.microsoft.com/ja-jp/sysinternals/downloads/process-explorer
  2. ダウンロードしたzipを解凍し「procexp64.exe」を実行する
    ※「procmon64a.exe」はARM64用らしい

こちらも親プロセスが先に終了した場合、子プロセスは左寄せとなりツリー表示にはなりません。
Windowsの仕様です。

f:id:tarenagashi_info:20201108161316p:plain:w600

PowerShellでファイルをHTTP POSTする

PowerShellでファイルをHTTP POSTしたかったので調べてみました。
サーバ側のコードもPHPで作成して、動作確認もしてみます。

環境

クライアント: PowerShell v5.1
サーバ: CentOS7.6+Apache2.4.6+PHP5.4.16

Powershellスクリプト

「192.168.1.1」はWebサーバのIPアドレスです。

###########
# パラメータ
###########
$uri = "http://192.168.1.1"
$filePath = "C:\Users\test\test.txt"

###########
# Body
###########
$fileName = [System.IO.Path]::GetFileName($filePath)
$boundary = '----Boundary'
$tempFile = './tempfile'
$UTF8woBOM = New-Object "System.Text.UTF8Encoding" -ArgumentList @($false)

$sw = New-Object System.IO.StreamWriter($tempFile, $false, $UTF8woBOM)
$sw.Write("--$boundary`nContent-Disposition: form-data; name=`"up_file`"; filename=`"$fileName`"`n")
$sw.Write("Content-Type: application/octet-stream`n`n")
$sw.Close()

$fs = New-Object System.IO.FileStream($tempFile, [System.IO.FileMode]::Append)
$bw = New-Object System.IO.BinaryWriter($fs)
$fileBinary = [System.IO.File]::ReadAllBytes($filePath)
$bw.Write($fileBinary)
$bw.Close()

$sw = New-Object System.IO.StreamWriter($tempFile, $true, $UTF8woBOM)
$sw.Write("`n--$boundary--`n")
$sw.Close()

###########
# Post
###########
Invoke-RestMethod -Method POST -Uri $uri -ContentType "multipart/form-data; boundary=$boundary" -InFile $tempFile
Remove-Item $tempFile

サーバ側コード(PHP

動作確認のためのサーバ側のコードとなります。言語はPHPです。
簡易的なアップローダーとなります。

<?php
$tempfile = $_FILES['up_file']['tmp_name'];
$filename = './up_file/' . $_FILES['up_file']['name'];

if (is_uploaded_file($tempfile)) {
        move_uploaded_file($tempfile, $filename);
}
?>

動作確認

「/var/www/html」配下に上記のPHPを「index.php」として配置し、「up_file」フォルダも作成します。

# ls -lR /var/www/html
/var/www/html:
合計 4
-rw-r--r--  1 apache apache 191 11月  7 23:35 index.php
drwxr-xr-x. 2 apache apache  22 11月  7 23:38 up_file

クライアント側でPowerShellを実行したところ、ファイル「test.txt」を無事アップロードできました

/var/www/html/up_file:
合計 4
-rw-r--r-- 1 apache apache 30 11月  7 23:38 test.txt

# cat /var/www/html/up_file/test.txt
テストファイルです。