Home > Windows にまつわる e.t.c.

ファイルがウイルスか確認する


「怪しいメールに添付されているファイルはぜったに開いちゃダメ」と良く言われていましたが、最近は「怪しくない文面のメール」にウイルスファイルが添付されている事がとても多いです。

[ウイルスファイル添付メールのサンプル]

件名: 未入金リスト

お世話になっております。

平成28年7月05日現在 請求書を送付させて頂いている物件で、未入金の物件
のリストを送付させていただきます。

弊社6月が決算月となる為、ご入金予定日の確認をいたしたくメールさせて頂い
ております。

お手数おかけいたしますが、ご確認くださいます様宜しくお願いいたします。

 

差出人: ヤマト運輸株式会社 <mails@kuronekoyamato.co.jp>
件名: 商品お届けのご案内

■お届け予定日時
7月12日(水) 時間帯希望なし
※ゴルフ・スキー・空港宅急便(施設宛)の場合、プレー日(搭乗日)を表示し
ております。
■お届け先
(住所)添付ファイルをご確認ください。
■伝票番号:9530-8727-2756


ヤマト運輸株式会社

 

この手のメールは、メールヘッダーを見れば本物のメールか捏造メールかの判断つくのですが、素人目には判断が難しいのも確かです。

そんな時は、ファイルの正常性を確認できる Web サイトを使って添付ファイルが安全か否かを確認するのがお勧めです。

サイトからダウンロードしたファイルが安全なものなのかも同様に確認することができます。

 

VirusTotal - ウイルス、マルウェア、URL の無料オンライン スキャナー
https://www.virustotal.com/

 

添付ファイルをそのまま送ると情報漏洩になってしまいますが、VirusTotal はハッシュ値で確認できるので、情報漏洩にならず安全か否かの判断できます。

ハッシュ値は、Windows 8.1 (PowerShell 4.0) 以降であれば PowerShell の Get-FileHash コマンドレットで求めることができます。

PowerShell を開くには、Windowsキー + R で「ファイル名をして実行」を開き「powershell」と入力します。

 

PowerShell は便利なので、タスクバーにピン止めしておくと良いでしょう。

チェックするファイルのフルパスは、エクスプローラーで Shift を押しながらファイルを右クリックすると、「パスのコピー」が表示されるので、これを選択するとクリップボードにフルパスがコピーされます。

 

PowerShell で 「Get-FileHash 」と入力し、マウスを右クリックしてフルパスを入力するとハッシュ値が求められます。

値をダブルクリックすると選択されるので、Enter でクリップボードにコピーします。

 

この値を VirusTotal の「検索」に張り付けて検索します。

 

既知の安全なファイルの場合はこのように検出率がゼロになります。

 

業務とかで添付されたファイルの場合は、こんな感じでデータベースに登録されていないと表示されます。

 

ウイルスファイルの場合は、このように「検出率」がカウントされています。1つでもカウントされている場合は危険と判断するのが無難です。

 

Windows 8 (PowerShell 3.0) 以前の場合は、Get-FileHash がサポートされていないので、ハッシュ値を計算するツールを使うか、以下の関数を使ってください。

###################################################
# ファイルの SHA256 ハッシュを求める
###################################################
function GetSHA256FileHash($Path){
    if( -not (Test-Path $Path)){
        echo "[FAIL] $Path not found."
        exit
    }

    # バイト配列でファイル読み込む
    $ByteString = Get-Content $Path -Encoding Byte

    # アセンブリロード
    Add-Type -AssemblyName System.Security

    # SHA オブジェクトの生成
    $SHA = New-Object System.Security.Cryptography.SHA256CryptoServiceProvider

    # Hash 値を求める
    $HashBytes = $SHA.ComputeHash($ByteString)

    # SHA オブジェクトの破棄
    $SHA.Dispose()

    # Hash 値を16進文字列にする
    $HashString = ""
    foreach( $HashByte in $HashBytes ){
        $HashString += $HashByte.ToString("X2")
    }

    $HashString | Clip
}

 

使い方は、PowerShell にコピペして、GetSHA256FileHash にファイルのフルパスを与えます。

プロンプトが帰ってきたら、ハッシュ値がクリップボードにコピーされるので、VirusTotal の「検索」に張り付けて検索します。

 

この方法を使うと高確率でウイルスファイルを検出できますが、完全ではありません

ピンポイントで狙われた標的型攻撃とか、これまで検出された事の無いウイルスだとこのチェックに引っかからない可能性が高いです。

業務で特定の相手とファイル交換するのであれば、公開鍵方式で暗号化する運用にすると安全度が増します。

 

PowerShell で公開鍵方式暗号ファイルを交換をする
http://www.vwnet.jp/Windows/PowerShell/PublicKeyCrypto.htm

 

Microsoft では、ウイルスファイルの検体を受け付けているので、上級者の方は検体を提出するのも良いでしょう

Submit a sample - Microsoft Malware Protection Center
https://www.microsoft.com/en-us/security/portal/submission/submit.aspx

 

関連情報

PowerShell で VirusTotal の Web API を使ってファイルの安全性を確認する
http://www.vwnet.jp/Windows/PowerShell/2016100501/CheckVirusTotalWebAPI.htm

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.