背景
仕事中、突然「証明書インストール」の画面が飛び出てきた
- 迷わず「はい」
- 理由がわからんものなんて押せない「いいえ」
- 理由を調査して、判断する
IT に縁がない順に上の選択肢を選ぶんじゃないのかなぁと思います。
ということで、3
の調査方法を残しておく
まぁ、勿論情シに聞いて、対処する、というのが一番楽だとは思います
セキュリティ警告の調査と対処プロセス
概要
ポップアップさせてきたプロセスを調査し、その実行方法、実行元を調べる
証明書インストール要求が突然表示された場合の、原因特定から対処までの具体的な手順。
セキュリティ警告の例
- 発行者:
SAMPLE-CORP-CA
- 拇印:
...
調査プロセス
1. 関連プロセスの特定
まず、証明書インストールを実行しているプロセスを特定します。
# 証明書関連のプロセスを確認
Get-Process | Where-Object {
$_.ProcessName -like "*cert*" -or
$_.ProcessName -like "*mmc*" -or
$_.ProcessName -like "*install*"
} | Select-Object ProcessName, Id, StartTime, Path
出力例:
ProcessName Id StartTime Path
----------- -- --------- ----
certutil 12345 2025/06/17 14:30:00 C:\WINDOWS\system32\certutil.exe
2. プロセスの詳細調査
プロセス ID を特定出来たら、
特定されたプロセスの実行内容を詳しく調査します。
# プロセスの詳細情報を取得
Get-Process -Id 12345 -IncludeUserName |
Select-Object ProcessName, Id, UserName, StartTime, Path
# 実行されたコマンドラインを確認
wmic process where processid=12345 get commandline
コマンドライン例:
CertUtil -f -user -p "SamplePass123!" -importPFX "sample_device.p12" noExport
実行コマンドがわかったので、これらを探すことになります。
3. 関連ファイルの調査
証明書ファイルや実行スクリプトの場所と内容を確認します。
# 証明書ファイルの検索
Get-ChildItem -Path "C:\" -Name "*.p12" -Recurse -ErrorAction SilentlyContinue |
Select-Object -First 5
# 一時フォルダの内容確認
Get-ChildItem -Path "C:\temp\sample_cert\" |
Select-Object Name, Length, LastWriteTime
4. 実行スクリプトの内容確認
最後は、
証明書インストールを実行したスクリプトの内容を分析します。
@echo off
setlocal
:: ログファイルのパスを設定
set LOGFILE=CertInstall.log
echo ------------------START------------------ >> %LOGFILE%
echo %date% %time% >> %LOGFILE%
:: 引数の確認
if "%~1"=="" (
echo Password argument is missing. >> %LOGFILE%
exit /b 1
)
if "%~2"=="" (
echo Certificate file argument is missing. >> %LOGFILE%
exit /b 1
)
:: 証明書のインストール実行
set "password=%~1"
set "certfile=%~2"
CertUtil -f -user -p "%password%" -importPFX "%certfile%" noExport >> %LOGFILE% 2>&1
if errorlevel 1 (
echo Error: CertUtil command failed >> %LOGFILE%
exit /b 1
)
echo -------------------END------------------- >> %LOGFILE%
endlocal
exit /b 0
5. イベントログの確認
念のため、
システムログから関連するイベントを確認します。
# アプリケーションログの確認
Get-WinEvent -FilterHashtable @{
LogName='Application';
StartTime=(Get-Date).AddHours(-1)
} | Where-Object {
$_.Message -like "*cert*" -or
$_.Message -like "*SAMPLE-CORP-CA*"
} | Select-Object TimeCreated, Id, LevelDisplayName, Message
# システムログの確認
Get-WinEvent -FilterHashtable @{
LogName='System';
StartTime=(Get-Date).AddHours(-1)
} | Where-Object {
$_.Message -like "*cert*"
} | Select-Object TimeCreated, Id, LevelDisplayName, Message
調査結果の分析
今回は、企業内の Wifi 用証明書インストールでした。
無線 LAN 申請書を出したら、承認通知が来る代わりに
業務中に
勝手にこれが立ち上がってくるので、
「はい」を押せ、とのこと
本気で?って思いません?
情シの管理権限で、裏でPC操るのは全然いいんですけど、これを押させるってことは
- 不審メールやブラウジングで、「怪しい釦をクリックする」という成功体験を植え付ける
に等しいと思います。
あらためて調査方法まとめ
-
プロセス特定
Get-Process | Where-Object {$_.ProcessName -like "*cert*"}
-
コマンドライン確認
wmic process where "name='certutil.exe'" get commandline
-
ファイル確認
- 証明書ファイルの場所と作成日時
- 実行スクリプトの内容分析
判断基準
✅ インストールを許可する場合
- IT 部門からの正式な指示がある
- 業務上必要な認証システムの一部
- 証明書の発行者が信頼できる
- ファイルの出所が明確
❌ インストールを拒否する場合
- 実行した覚えがない
- 発行者が不明または怪しい
- IT 部門が関与していない
- ファイルの出所が不明
事後対応
インストール許可した場合
-
動作確認
- WiFi や VPN 接続のテスト
- 証明書ストアでの確認
-
ログ記録
- インストール実行時刻
- 証明書の詳細情報
- 実行理由
インストール拒否した場合
-
セキュリティ報告
- インシデント報告書作成
- 関連ファイルの保存
- 状況の詳細記録
-
システム確認
- マルウェアスキャン実行
- 不審なプロセスの確認
- ネットワーク接続の監視
まとめ
セキュリティ警告が表示された際は、以下の原則を守ることが重要です:
- 冷静な対応: 慌てずに状況を把握する
- 徹底した調査: プロセスとファイルの詳細確認
- 適切な判断: 業務上の必要性と安全性の両面から評価
- 確実な記録: 対応内容と結果の詳細な記録
- 継続的な学習: セキュリティ知識の向上
あとがき
会社で見たときも疑問だったけど、
改めてまとめてみて・・・駄目だこりゃって感じてます・・が、どうなんでしょうねぇ