NetAppでSales Specialistをしている小寺です。昨日はAmazon FSx for NetApp ONTAP(以下、FSx for ONTAP)のウイルス対策機能であるARPの仕組みについてご紹介しました。こちら
今日は、実際にARPを有効にして、動作を確認してみます。
ARPを有効にしてみる
有効化の手順を参考にボリューム「vol1」でARPを有効にします。
::> version
NetApp Release 9.17.1P2D1: Wed Nov 19 09:35:42 UTC 2025
FsxId0cbc79bab7970edad::> security anti-ransomware volume enable -volume vol1 -vserver fsx
::> security anti-ransomware volume show
Vserver Volume State Dry Run Start Time
---------- ---------------- ---------------- ------------------
fsx vol1 enabled -
::>
他に攻撃を受けたときの設定も確認します。
::> security anti-ransomware volume attack-detection-parameters show -vserver fsx -volume vol1
Vserver Name : fsx
Volume Name : vol1
Block Device Auto Learned Encryption Threshold : 0
Is Detection Based on High Entropy Data Rate? : true
Is Detection Based on Never Seen before File Extension? : true
Is Detection Based on File Create Rate? : true
Is Detection Based on File Rename Rate? : true
Is Detection Based on File Delete Rate? : true
Is Detection Relaxing Popular File Extensions? : true
High Entropy Data Surge Notify Percentage : 100
File Create Rate Surge Notify Percentage : 100
File Rename Rate Surge Notify Percentage : 100
File Delete Rate Surge Notify Percentage : 100
Never Seen before File Extensions Count Notify Threshold : 5
Never Seen before File Extensions Duration in Hour : 48
::>
ARPを試してみる
KBのランサムウェア攻撃の検知を簡単にテストする方法を参考にしています。NetAppのサポートIDがある方はログインして閲覧可能です。
存在しない拡張子ファイルを複数作り、複数回書き込み等を行い、エントロピーが高い状況を作っています。
#!/bin/sh
# POSIX-compatible ARP ext test (no bash arrays/functions)
set -eu
# ===== 設定 =====
TARGET_DIR="/mnt/fsx_vol1" # ここを実環境のマウントパスに
FILE_SIZE_KB=256 # 1ファイルあたりの初回書き込みサイズ(KB)
WRITE_LOOPS=3 # 同一ファイルへの追記ループ回数
COPY_ROUNDS=2 # 全ファイル一括コピー回数
PAUSE_SEC=1 # 操作間の待ち秒数
EXT_PREFIX="novel" # 未既知拡張子のプレフィックス
COUNT=50 # 生成する拡張子/ファイルの数
# ===== 前提チェック =====
if [ ! -d "$TARGET_DIR" ]; then
echo "ERROR: TARGET_DIR '$TARGET_DIR' が存在しません。" 1>&2
exit 1
fi
if [ ! -w "$TARGET_DIR" ]; then
echo "ERROR: TARGET_DIR '$TARGET_DIR' に書き込み権限がありません。" 1>&2
exit 1
fi
# ===== 作業ディレクトリ =====
RUN_ID=$(date +%Y%m%d_%H%M%S)
WORK_DIR="$TARGET_DIR/arp_test_$RUN_ID"
mkdir -p "$WORK_DIR"
echo "== 開始: 未既知拡張子ファイルの作成・I/O・コピー =="
echo "ターゲット: $TARGET_DIR"
echo "作業ディレクトリ: $WORK_DIR"
# ===== 拡張子リスト生成(ファイルに書き出し)=====
EXT_LIST_FILE="$WORK_DIR/ext_list.txt"
: > "$EXT_LIST_FILE"
i=1
while [ "$i" -le "$COUNT" ]; do
# ランダム英数字5文字生成(/dev/urandom → tr → cut)
rand=$(dd if=/dev/urandom bs=1 count=16 2>/dev/null | tr -cd 'a-z0-9' | cut -c1-5)
# 01, 02...のゼロパディング
pad=$(printf "%02d" "$i")
echo "${EXT_PREFIX}_${pad}${rand}" >> "$EXT_LIST_FILE"
i=$((i+1))
done
# ===== 1) ファイル作成 & 初回書き込み =====
echo "== STEP 1: ファイル作成 + 初回書き込み =="
line_no=1
while read -r ext; do
fname=$(printf "file%02d.%s" "$line_no" "$ext")
fpath="$WORK_DIR/$fname"
# ランダムデータを書き込み(エントロピー向上)
dd if=/dev/urandom of="$fpath" bs=1024 count="$FILE_SIZE_KB" status=none 2>/dev/null
echo "UNSEEN-EXTENSION:$ext" >> "$fpath"
line_no=$((line_no+1))
sleep "$PAUSE_SEC"
done < "$EXT_LIST_FILE"
# ===== 2) 追記I/Oループ =====
echo "== STEP 2: 同一ファイルへの追記I/O =="
loop=1
while [ "$loop" -le "$WRITE_LOOPS" ]; do
echo "-- ループ $loop / $WRITE_LOOPS"
line_no=1
while read -r ext; do
fpath="$WORK_DIR/$(printf "file%02d.%s" "$line_no" "$ext")"
echo "APPEND_LOOP:$loop EXT:$ext TS:$(date -Is)" >> "$fpath"
# 追記:oflag=append は sh だと未対応の環境もあるので cat → >> で代替
dd if=/dev/urandom bs=512 count=64 2>/dev/null | cat >> "$fpath"
line_no=$((line_no+1))
sleep 0.2
done < "$EXT_LIST_FILE"
loop=$((loop+1))
sleep "$PAUSE_SEC"
done
# ===== 3) 一括コピー =====
echo "== STEP 3: 一括コピー($COPY_ROUNDS ラウンド) =="
round=1
while [ "$round" -le "$COPY_ROUNDS" ]; do
dst="$WORK_DIR/copy_round_$round"
mkdir -p "$dst"
# 拡張子パターンでコピー
cp -a "$WORK_DIR"/file*.${EXT_PREFIX}_* "$dst"/ 2>/dev/null || true
round=$((round+1))
sleep "$PAUSE_SEC"
done
# ===== 4) ランダムリネーム =====
echo "== STEP 4: ランダムリネーム =="
for f in "$WORK_DIR"/file*.${EXT_PREFIX}_*; do
[ -e "$f" ] || continue
base=$(basename "$f")
# 拡張子抽出
ext="${base##*.}"
name="${base%.*}"
rnd=$(dd if=/dev/urandom bs=1 count=8 2>/dev/null | tr -cd 'a-z0-9' | cut -c1-4)
mv "$f" "$WORK_DIR/${name}_renamed_${rnd}.${ext}"
sleep 0.05
done
echo "== 完了: I/Oとコピー操作を実施しました =="
echo "作業ディレクトリ: $WORK_DIR"
echo
シェルを実行してみました。
$ ./arp_ext_test.sh
== 開始: 未既知拡張子ファイルの作成・I/O・コピー ==
ターゲット: /fsx
作業ディレクトリ: /fsx/arp_test_20251214_085928
== STEP 1: ファイル作成 + 初回書き込み ==
== STEP 2: 同一ファイルへの追記I/O ==
-- ループ 1 / 3
-- ループ 2 / 3
-- ループ 3 / 3
== STEP 3: 一括コピー(2 ラウンド) ==
== STEP 4: ランダムリネーム ==
== 完了: I/Oとコピー操作を実施しました ==
作業ディレクトリ: /fsx/arp_test_20251214_085928
$
現時点でのARPアラートの表示を確認してみます。攻撃性がないと判断されています。念のために再度シェルを実行しましたが、同じく「Attack Probability: none」のままでした。
::> security anti-ransomware volume show -vserver fsx -volume vol1
Vserver Name: fsx
Volume Name: vol1
State: enabled
Dry Run Start Time: -
Attack Probability: none
Attack Timeline: -
Number of Attacks: -
Attack Detected By: -
Block Device Detection Status: -
Block Device Evaluation Start-time: -
スナップショットの取得がされているかを「snapshot show -volume vol1 -instance」で確認します。2つ取得がされていました。
実際のディレクトリも確認してみます。「backup-05984557572e5f347」ディレクトリにシェル実行後のリネーム後のファイルが確認できました。
# ls -la /fsx/.snapshot/*
/fsx/.snapshot/Anti_ransomware_periodic_backup.2025-12-14_0839:
total 8
drwxr-xr-x. 3 root root 4096 Dec 11 12:35 .
drwxrwxrwx. 4 root root 4096 Dec 14 09:17 ..
/fsx/.snapshot/backup-05984557572e5f347:
total 24
drwxr-xr-x. 4 ec2-user ec2-user 8192 Dec 14 09:00 arp_test_20251214_085928
drwxr-xr-x. 4 ec2-user ec2-user 8192 Dec 14 09:09 arp_test_20251214_090757
#
ARPレポートを生成します。
::> security anti-ransomware volume attack generate-report -vserver fsx -volume vol1 -dest-path fsx:vol1/
Report "report_file_fsx_vol1_14-12-2025_09-23-57" available at path "fsx:vol1/".
::>
実際のレポートです。ランサムウェアの可能性があると疑われるファイルの一覧が表示されています。
# cat report_file_fsx_vol1_14-12-2025_09-23-57
1 12/14/2025 09:00:58 csq_min=275 csq_avg=239 unsafe_extn=0 file_hdr=0 safe_extn=0 score=0.9 999973280131972 novel_01a2 /arp_test_20251214_085928/file01_renamed_.novel_01a2
2 12/14/2025 09:00:45 csq_min=275 csq_avg=237 unsafe_extn=0 file_hdr=0 safe_extn=0 score=0.9 999973413222192 novel_02u8b /arp_test_20251214_085928/file02_renamed_.novel_02u8b
3 12/14/2025 08:59:33 csq_min=275 csq_avg=242 unsafe_extn=0 file_hdr=0 safe_extn=0 score
以下略
・unsafe_extn=0 / safe_extn=0は、システムの拡張子分類リストに従って安全でない、または安全として分類された拡張子と一致しないことを示します。
・csq_min、csq_avg、file_hdr、scoreなど、その他のパラメータはシステムによって生成される指標で、ファイルのスキャンと分類に内部的に使用されます。この定義については、現時点では公開されていません。
※KBのセキュリティランサムウェア対策ボリューム攻撃レポート出力を参考。
ファイルを作成して、ランダム書き込みを行ったうえで、存在しない拡張子に変更することで、ARPでスナップショットを取得し、レポート出力されることが確認できました。
どのような通知がされるのかはまた別途、試してみたいと思います!