pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

ファイルレス攻撃とは?

ポイント

  • ターゲットにexeファイルをダウンロードさせ実行させるのが従来攻撃。
  • ファイルレス攻撃は、何かしらでスクリプトを実行させ、マルウェアをメモリ上にDLし実行するため、痕跡を残さない。(ディスクにファイル生成されず & 残らず)

 例) Wordの中に、PowerShellコード含む等

  • ファイルレスといっても、メール等でファイルを流入させる必要あり。
  • PowerShellが悪用されるケース多い。他Windows機能でも攻撃可能。
  • 正規のプログラムを利用してる為、アンチウイルスでは気づきづらい。
  • スクリプトの場合、難読化される為、検知が困難になる。
  • EPP(アンチウイルス)では気づきづらい。EDR必要。

以下が分かりやすい

EDRとは?

ポイント

  • EDRはEndpoint Detection and Responseの略
  • 動作を監視しマルウェア感染を検知する 。
  • EPP(Endpoint Protection Platform)は事前対策、EDRは事後対策
  • EPPは基本的にパターンマッチングによる検知、ゼロデイ、未知マルウェアに弱い。
  • NAGVはNext Generation Anti Virusの略
  • EPPの弱点補うべく機械学習・ふるまい検知等でマルウェアを検知する。

 以下図が分かりやすい。
 NGAV・EDR・DLPの違いとは? エンドポイント情報セキュリティ対策製品に関する用語解説 | お役立ちブログ | 情報セキュリティ対策に関するお役立ち情報 | 企業の情報セキュリティ対策・ITシステム運用のJBS JBサービス株式会社 JBサービス株式会社
 

  • EDRとEPPは別物、どちらか一方あれば良いでない。両方必要。

Jmeterシナリオ作成

Jmeterのシナリオ作成の手順を記載する。
シナリオは、EC-CUBEにログインする操作で作成する。
 

ベースシナリオ作成

手順メモ

①スレッドグループ作成

 テスト計画->追加->Threads(Users)->スレッドグループ
 

②記録コントローラ作成

 スレッドグループ->追加->ロジックコントローラー->記録コントローラー
 

③HTTPプロキシサーバ作成

 テスト計画->追加->Non-Testエレメント->HTTPプロキシサーバ
 

④HTTPプロキシサーバ設定

 1) 記録コントローラの設定
  HTTPプロキシサーバ->TestPlanCreationタブ->対象となるコントローラ
  テスト計画→スレッドグループ→記録コントローラ
 2) HTTPプロキシサーバ->Requests Filteringタブ
  挿入するパターン

.*IPアドレス/FQDN.*

  除外するパターン

.*\.js.*
.*\.gif.*
.*\.svg.*
.*\.css.*
.*\.jpg.*
.*\.woff2.*
.*\.ico.*
.*\.png.*
.*\.woff.*
.*\.ttf.*

 

⑤HTTPプロキシサーバ開始

 テスト計画->HTTPプロキシサーバ->開始
 

FireFoxプロキシ & 証明書設定

 1) プロキシサーバ設定
  127.0.0.1:8888
 2) 証明書インポート
  オプション->プライバシーとセキュリティ->証明書->証明書を表示
  認証局証明書タブ→インポート
  jmeterのbinフォルダは以下の「crt」ファイルをインポート
  "この認証局によるこのウェブサイトの識別を信頼する"
 

FirefoxEC-CUBEページにアクセスし、ログイン操作を実施

 https://IPアドレス/eccube
 

⑧ログイン操作が記録されてることを確認し、名前変更

 f:id:pikesaku:20210822234740p:plain
 

⑨リスナー作成

 スレッドグループ->リスナー->結果をツリーで表示
 

⑨ベースシナリオ動作確認

 スレッドグループ->記録コントローラ-->開始(上部にある緑矢印)
 結果をツリーで表示->応答データタブ
 表示方法をTextからHTMLに変更すると画面表示で確認可能
 ★ログインができてない、Hidden、Cookieが設定できてないため★
 f:id:pikesaku:20210822234344p:plain
 

動的パラメタ対応

手順メモ

①シナリオ移動 & 記録コントローラ削除

 ※ベースシナリオ出来た為、記録コントローラは不要
 シナリオを全てと、結果をツリーで表示をクリックし、スレッドグループ直下にドラッグ & ドロップ
 記録コントローラを右クリックし削除
 

②ログインエラー検知

 ※正しくログインできた場合の条件を設定。このケースではログイン後、"ログアウト"が右上に表示される事を利用。
 スレッドグループ->ログイン実施操作(03_LOGIN_TOP)を右クリック->追加->アサーション->アサーション
 テストするレスポンスフィールド->テキストのレスポンス→パターンマッチルール->含む
 テストパターンフィールに値("ログアウト")を設定し、追加をクリック
 
 シナリオ実行し、ログインエラーが検知される事を確認
 f:id:pikesaku:20210823000817p:plain
 

③クッキー設定

 ブラウザの開発者ツールを使いCookieを使ってるかを確認する。
 次にCookieは記録しない設定である事を確認
 f:id:pikesaku:20210823001842p:plain
 Cookieの記録設定
 スレッドグループ->追加->設定エレメント->HTTPクッキーマネージャ
 繰り返し毎にクッキーを破棄しますか?にチェックを入れる。
 

④クッキー設定の確認

 シナリオ実行し、クッキーがセットされてる事を確認
 f:id:pikesaku:20210823002434p:plain
 

⑤Hiddenパラメタ設定

 ブラウザの開発者ツールを使いHiddenパラメタを使ってるかを確認する。
 次にログイン実行時のシナリオより、送信したHiddenパラメタを確認
 f:id:pikesaku:20210823002849p:plain
 
 次にHiddenパラメタの指定方法をログイン実施の前ページの結果より検索
 f:id:pikesaku:20210823010757p:plain
 
 次にログイン画面(02_LOGIN)で正規表現抽出を設定
 02_LOGIN->追加->後処理->正規表現抽出
 f:id:pikesaku:20210823011258p:plain
 
 ★ポイント★行頭からマッチ必要。以下みたいに書く。

.*.*<INPUT value="(.*)" NAME="HOGE" TYPE="hidden">

 
 次にログイン実行画面(03_LOGIN_TOP)に、Hiddenパラメタの変数を設定
 f:id:pikesaku:20210823005109p:plain
 

⑥Hiddenパラメタ設定の確認

 シナリオ実行し、ログインが成功した事を確認
 

シナリオ最適化

手順メモ

①接続先情報の共通化

 プロトコル、IP/FQDN、ポート番号を共通化する。
 スレッドグループ->追加->設定エレメント->HTTPリクエスト初期値設定
 f:id:pikesaku:20210823012529p:plain
 
 シナリオ各ページから接続先情報を削除
 f:id:pikesaku:20210823012919p:plain
 

リファラ追加

 必須でないが、一応追加
 スレッドグループ->追加->後処理->正規表現抽出
 f:id:pikesaku:20210823013332p:plain
 
 スレッドグループ->追加->設定エレメント->HTTPヘッダマネージャ->追加
 f:id:pikesaku:20210823013633p:plain
 
 シナリオ各ページからReferer情報を削除 
 f:id:pikesaku:20210823013824p:plain
 
 トップページアクセス時のリファラに空文字を設定
 ※これしないと、Referer: ${ref}でリクエストしてしまう。
 01_TOP->HTTPヘッダマネージャ->追加
 f:id:pikesaku:20210823014256p:plain
 
 ログイン情報の変数化
 スレッドグループ->追加->設定エレメント->ユーザー定義変数->追加
 f:id:pikesaku:20210823014825p:plain
  
 ログイン情報を変数で設定
 f:id:pikesaku:20210823015041p:plain
 

外部ファイルの読み込み

今までのシナリオだと1ユーザーしか使えない。外部ファイル読み込みで複数ユーザーを利用可能。
ユーザー以外の入力用データの読み込みでも利用可能。この手順ではユーザー情報の読み込みで利用。
 

手順メモ

CSVファイル生成

 以下フォーマットのCSVファイルを作成
 ユーザー1,ユーザー1のパスワード
 ユーザー2,ユーザー2のパスワード
 ユーザー3,ユーザー3のパスワード
 

②ファイル読み込み設定

 スレッドグループ->追加->設定エレメント->CSV Data Set Config
 f:id:pikesaku:20210823021756p:plain
 

負荷テスト用パラメタ設定

 

手順メモ

①結果表確認リスナー追加

 スレッドグループ->追加->リスナー->結果を表で表示
 各シナリオの実行時間の情報が得られる。
 f:id:pikesaku:20210823025441p:plain
 

②タイマ設定

 スレッドグループ->追加->タイマ>一様乱数タイマ
 ※3~5秒の遅延
 f:id:pikesaku:20210823030336p:plain
 上記は全シナリオに統一で設定。各シナリオ別に設定する際は、スレッドグループでなく各シナリオに一様乱数タイマを追加する。
 図は参考サイトより引用

 f:id:pikesaku:20210823030008p:plain

③スレッドプロパティ設定

 スレッド、ループ、ランプアップの設定。
 変数定義する事で、CUIの場合に実行時にオプションで値変更が可能。GUIでは初期値で実行される。
 f:id:pikesaku:20210823031656p:plain
 

④エラー後のアクション設定

 f:id:pikesaku:20210823032956p:plain
  

⑤設定の保存

 テスト計画をクリックした状態で、保存をする。
 

コマンドライン実行

 CUIで動作しない為、リスナー無効化
 f:id:pikesaku:20210823033406p:plain
 
 以下コマンド実行

jmeter -n -t scenario.jmx -l result.jtl -Jthread=1 -Jrampup=1 -Jloop=1

 

トラブル調査

 

手順メモ

ログビューアの見方

 オプション->ログビューア

Jmeterセットアップメモ

JAVAセットアップ

手順メモ

JAVA実行環境ダウンロード & インストール
 JDK Builds from Oracle
 JDK 16
JAVA環境変数設定
 システムのプロパティ→詳細設定→環境変数→システム環境変数→Pathにjavaw.exeのパス追加

Jmeterセットアップ

手順メモ

Jmeterダウンロード
 Apache JMeter - Download Apache JMeter
②日本語化
 apache-jmeter-5.3\bin\jmeter.bat
 上記ファイル編集
 ※変更前

set JMETER_LANGUAGE=-Duser.language="en" -Duser.region="EN"

 ※変更後

rem set JMETER_LANGUAGE=-Duser.language="en" -Duser.region="EN"
set JMETER_LANGUAGE=-Duser.language="ja" -Duser.region="JP"

③起動確認
 jmeter.batをダブルクリック

④デザイン変更
 Jmeter画面より
 Options->Look and Feel

Windows性能情報調査メモ

パフォーマンスモニタ

 

起動方法

perfmon
 

使い方メモ

リアルタイムで使う場合

左ペインの"パフォーマンスモニタ"
 

スクロール表示

プロパティ→"グラフ"タブ→スクロール
 

スケール

  • パフォーマンスモニタの縦軸のMAX値はデフォルト100。
  • 採取した値をプロットする時の係数。デフォルトは1。
  • 値が%で表現するデータはデフォルトで問題なし。
  • 大きな数値は、デフォルト100以内には収まらない。スケールを0.01とかにすると、100以内に収まる。

 

ベンチマーク時(記録用)

f:id:pikesaku:20210823203811p:plain
f:id:pikesaku:20210823203908p:plain
f:id:pikesaku:20210823203938p:plain
f:id:pikesaku:20210823203958p:plain
f:id:pikesaku:20210823210405p:plain
f:id:pikesaku:20210823210609p:plain

見るポイント

パフォーマンスモニタでCPUリソース監視する際の主なカウンターについて – Rainbow Engine
パフォーマンスモニタでディスク(PhysicalDisk)監視する際の主なカウンターについて+具体的にどこをカウントしているのか?を図で表現してみた – Rainbow Engine
パフォーマンスモニタでメモリ(Memory)監視する際の主なカウンターについて+具体的にどこをカウントしているのか?を図で表現してみた – Rainbow Engine
 

カテゴリ 項目 説明
Processor %Processor Time CPU使用率
Processor %User Time CPU使用率(User)
Processor %Privileged Time CPU使用率(Kernel)
Memory Pages/sec ページIN/OUT。20以上はボトルネック可能性あり
Memory %Committed Bytes In Use 仮想メモリ使用率
Memory Available MBytes 空きメモリ
Paging File %Usage ページファイル使用率
Disk Current Disk Queue Length キュー待ちIO要求数。平均2以上はボトルネックの可能性あり
Disk %Disk Time ジー率。継続50%以上はボトルネックの可能性あり
Process %Processor Time CPU使用率
Process Working Set 物理メモリ使用サイズ(共有込み)
Process Working Set - Private 物理メモリ使用サイズ(共有なし)
Process Thread Count アクティブスレッド数

 

ベンチマーク時(リアルタイムモニタ用)

f:id:pikesaku:20210823205240p:plain
 

リソースモニタ

 

起動方法

perfmon /res
 

おまけ

ページフォルトとは?
プログラムがアクセスした仮想メモリのデータが、物理メモリにない場合にOSに通知する処理。OSは、この通知を受けたら、物理メモリ上のデータの内、ページアウト可能なデータをページアウトして、物理メモリの空きを確保し、ページフォルトしたデータを読み込む。
ページフォールト(page fault)とは - IT用語辞典 e-Words

配布リスト宛てのメールに付与されるEOPヘッダ

確認したヘッダ

[環境]
・配布リスト作成
・メンバーはテナント外アドレスのみ

テナント外アドレスで受信したメールのヘッダ

正常なメール

X-Forefront-Antispam-Report:
CIP:XX.XX.XX.XX;CTRY:JP;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:ip-XX-XX-XX-XX.ap-northeast-1.compute.internal;PTR:ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com;CAT:NONE;SFS:(346002)(39830400003)(396003)(376002)(136003)(558084003)(68406010)(55016002)(70586007)(956004)(2616005)(2160300002)(34206002)(356005)(316002)(33656002)(36906005)(83170400001)(336012)(498600001)(26005)(19618925003)(1076003)(7696005)(42882007)(2906002)(46492009)(25626001)(38292003)(421364004)(425394004)(19559445001);DIR:OUT;SFP:1102;

SCL:1
SFV:NSPM
CAT:NONE

SPAMメール

X-Forefront-Antispam-Report:
CIP:XX.XX.XX.XX;CTRY:JP;LANG:en;SCL:7;SRV:;IPV:CAL;SFV:SPM;H:ip-XX-XX-XX-XX.ap-northeast-1.compute.internal;PTR:ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com;CAT:OSPM;SFS:(39830400003)(346002)(396003)(376002)(136003)(218001);DIR:OUT;SFP:1501;

SCL:7
SFV:SPM
CAT:OSPM