はじめに
フォレンジックの証跡収集で使うツールの話です。
前提として収集するマシン・されるマシンはWindows 10 Proを想定しています。
Win 10 Homeは手元に環境がないため動作未確認です。
何をするの?
Kansa(読み:カンザ)というフレームワークを使って、証跡の収集を行います。
Kansaのコマンド例(.\kansa.ps1 -Target $env:COMPUTERNAME -ModulePath .\Modules -Verbose)では、AD環境前提なので、ADの無い一般のご家庭やADをもそも使ってない企業ではそのまま使うことはできません。
じゃあ、どうすればいいの?
このフレームワークはWinRM(リモート管理サービス)を利用しています。
なので、まず普通の家庭のマシンはWinRMは無効になっているはずです。
また、接続されているネットワークを信頼していないとWinRMが使え無いのでネットワークの信頼設定も行う必要があります。
さらに、接続先が信頼されていないとWinRMで接続できないので、「接続先のマシン」についても信頼しなければなりません。
まとめると、
1.ネットワークを信頼するようにWindowsに設定する(接続する側・接続される側)
2.WinRMを有効化する(接続する側・接続される側)
3.接続先マシンも信頼するようにWindowsに設定する(接続する側)
カッコ内は、設定するマシンを示しています。
(3は接続する側だけ設定するよう示していますが、できなかったら両方設定してみてください)そのための設定を以下に記載します。
(引用元:How to setup WinRM in a WorkGroup Non Domain Environment)
1.ネットワークを信頼するようにWindowsに設定する
→WinRMサービスを動作させるNICを「プライベートネットワーク」にします。
Get-NetConnectionProfile | Set-NetConnectionProfile -NetworkCategory Private
2.WinRMを有効化する
→WinRMを有効化します。
Enable-PSRemoting -force
3.接続先マシンも信頼するようにWindowsに設定する
→10.10.10.12は接続先(信頼するべきホスト)です。ここは実際の環境に合わせて設定を行います。
winrm set winrm/config/client '@{TrustedHosts="11.10.10.12"}'
ここまでがWinRMの設定です。
これが済んだら、Kansaを実行し証跡を取得していきます。
以下のようなコマンドで実行可能です。
4. Kansaの実行
Kansa公式のコマンドに”-Authentication Default”オプションを付与することで、設定のめんどくさいケルベロス認証をせずにログインさせることができます。(わざわざSSLを使うとかの設定にしなくても良くなる)
コマンドテンプレート
.\kansa.ps1 -Target <コンピュータ名> -Credential <アカウント名> -ModulePath .\Modules -Verbose -Authentication Default
コンピュータ名:接続するIPアドレスやホスト名、ただし、「localhost」は使えない。
アカウント名:収集したいコンピュータ上にある管理権限を持つアカウントを設定します。
パスワードはプロぷとが立ち上がるので、そこで入力します。
自分自身に接続して収集する例(アカウント名が user1 の場合)
.\kansa.ps1 -Target $Env:COMPUTERNAME -Credential user1 -ModulePath .\Modules -Verbose -Authentication Default
192.168.1.2に接続して収集する例(アカウント名が user1 の場合)
.\kansa.ps1 -Target 192.168.1.2 -Credential user1 -ModulePath .\Modules -Verbose -Authentication Default
TARGET_HOST(NetBIOS名)に接続して収集する例(アカウント名が user1 の場合)
.\kansa.ps1 -Target TARGET_HOST -Credential user1 -ModulePath .\Modules -Verbose -Authentication Default
2019年7月15日月曜日
2017年4月11日火曜日
C言語で相互参照する構造体の書き方メモ
最近D言語に色んな意味でドハマリしていて久しくC言語書いてなかったので忘れていた事をメモする。
こんな感じで、定義の前にタグ名だけのstructを書いておく。
多分3年ぶりくらいにC言語でプログラム書いたのでどうやったっけなーとか思い出すのに時間かかった、ていうかググった。
こんな感じで、定義の前にタグ名だけのstructを書いておく。
多分3年ぶりくらいにC言語でプログラム書いたのでどうやったっけなーとか思い出すのに時間かかった、ていうかググった。
2017年3月25日土曜日
UEFI AppをD言語で作れるようになるまでに。
さて、色々試しているD言語。
UEFI Appを作りたいってあれ。
任意のデータ構造とメソッドを持った任意の構造体を定義できた。
ワンチャンコレで作り始めることができそうなのでサンプルソースを置いておく。
ただ、RTTIとか、例外機構そういうD言語っぽい何かを使うことはできないので、
完全にメモリとか色々な管理をサボれる(scopeが使えるって意味で、メモリ管理機構等を作らなくていいという話ではない)CとDの間の何かっぽいアレができた。
下手したら、D言語のコミッターとかに見つかったらぶっころされそうな感じのハックをしているので、出来ればいい感じにobject.dとか実装していきたいけど
いい感じに出来ないからガムテープでぐるぐる巻きにした感じのものが出来た。
マングルされた名前のシンボルをただエクスポートしてるだけ。
基本的にRTTIのものばっかり。でもRTTI使わないしいいよねって感じ。
ただ、_d_assert_msgとかがどういうふうに使われてるのかが理解できるいい機会になった。
いじょー
追記
uefi-dライブラリを使ってUEFIを叩いている所。(クリックで拡大)
一般的な保護機構を持つOS上では動作しない命令(cliとhlt命令)がちゃんと実行されていることが確認できて楽しい。(build.ps1でqemuを-nographicモードで動かしてる。)
UEFI Appを作りたいってあれ。
任意のデータ構造とメソッドを持った任意の構造体を定義できた。
ワンチャンコレで作り始めることができそうなのでサンプルソースを置いておく。
ただ、RTTIとか、例外機構そういうD言語っぽい何かを使うことはできないので、
完全にメモリとか色々な管理をサボれる(scopeが使えるって意味で、メモリ管理機構等を作らなくていいという話ではない)CとDの間の何かっぽいアレができた。
下手したら、D言語のコミッターとかに見つかったらぶっころされそうな感じのハックをしているので、出来ればいい感じにobject.dとか実装していきたいけど
いい感じに出来ないからガムテープでぐるぐる巻きにした感じのものが出来た。
マングルされた名前のシンボルをただエクスポートしてるだけ。
基本的にRTTIのものばっかり。でもRTTI使わないしいいよねって感じ。
ただ、_d_assert_msgとかがどういうふうに使われてるのかが理解できるいい機会になった。
いじょー
追記
uefi-dライブラリを使ってUEFIを叩いている所。(クリックで拡大)
一般的な保護機構を持つOS上では動作しない命令(cliとhlt命令)がちゃんと実行されていることが確認できて楽しい。(build.ps1でqemuを-nographicモードで動かしてる。)
2017年3月12日日曜日
/SUBSYSTEM:UEFI_APPLICATIONなバイナリをD言語で
はい。
何もしないアプリケーションを作ってみたいと思います。
たぶん動かないんじゃないかなぁ。
動機:
1.頑張ればUEFI App作れる。
2.頑張れば→構造体とか使うと、object.dを定義してTypeInfo_Structとか実装しなきゃダメ。←これ誰か一緒にやって欲しい感じある。D言語の仕様を一緒に読んでほしい。
3.でも頑張る前にコンパイルして、実際にバイナリに落ちるか試したかった。
プロジェクトはね、ここにあるから。適当に色々やってみてって感じ。
dub -b=release でビルドできる
https://github.com/segfo/D_MinimalUEFI/tree/master
で、これがビルドスクリプト。MS製のリンカに色々とオプション渡してるだけ。
参考文献:MSDN:リンカー オプション
(注意点はdub -b=releaseオプションで必ずリリースビルドをすること。あと32ビットでビルドしようとしたら強制的に64bitビルドに切り替わるように、"dflags-x86"で、-m64を渡して切り替えるところくらいかな)
まぁ、アプリケーション本体のソースはこんな感じ本当に何もしない。
ていうか、何もできないんだよね。
D言語の場合C言語と違って、object.dを実装しないと構造体が使えないから。
本当に何もできない悲しい。
日本のD言語erの皆さん、ヒープがない環境でのobject.dの実装についてアドバイスください。
以上
何もしないアプリケーションを作ってみたいと思います。
たぶん動かないんじゃないかなぁ。
動機:
1.頑張ればUEFI App作れる。
2.頑張れば→構造体とか使うと、object.dを定義してTypeInfo_Structとか実装しなきゃダメ。←これ誰か一緒にやって欲しい感じある。D言語の仕様を一緒に読んでほしい。
3.でも頑張る前にコンパイルして、実際にバイナリに落ちるか試したかった。
プロジェクトはね、ここにあるから。適当に色々やってみてって感じ。
dub -b=release でビルドできる
https://github.com/segfo/D_MinimalUEFI/tree/master
で、これがビルドスクリプト。MS製のリンカに色々とオプション渡してるだけ。
参考文献:MSDN:リンカー オプション
(注意点はdub -b=releaseオプションで必ずリリースビルドをすること。あと32ビットでビルドしようとしたら強制的に64bitビルドに切り替わるように、"dflags-x86"で、-m64を渡して切り替えるところくらいかな)
まぁ、アプリケーション本体のソースはこんな感じ本当に何もしない。
ていうか、何もできないんだよね。
D言語の場合C言語と違って、object.dを実装しないと構造体が使えないから。
本当に何もできない悲しい。
日本のD言語erの皆さん、ヒープがない環境でのobject.dの実装についてアドバイスください。
以上
2017年1月29日日曜日
CTF4bのバイナリwriteup(復習問題除く)
と言うわけで、Writeupをサクッと書いてしまおうと思います。
(時間無いし、あとでやるとかやってるとだいたいモチベが低下するので)
解いた問題だけやる形でいきます。
と言うわけでスコアボード。
表示はなんか恥ずかしいから、susonoにしてた、バイナリ(非実在バイナリ=テキスト形式で渡されたやつはやってません)を今回は攻めてみた。
(時間無いし、あとでやるとかやってるとだいたいモチベが低下するので)
解いた問題だけやる形でいきます。
と言うわけでスコアボード。
表示はなんか恥ずかしいから、susonoにしてた、バイナリ(非実在バイナリ=テキスト形式で渡されたやつはやってません)を今回は攻めてみた。
スコアボード、スコア全く気にしてなかったけど48位だった。
やったぜ?
2017年1月21日土曜日
Raspberry pi Zeroを個人輸入してみた
というわけでですね、今回はラズパイZeroを個人輸入してみた。
目的:
Androidデバイスから、物理スイッチのみのスピーカー・照明器具の電源制御をしたい
と言う感じなので、とりあえず全部入りのスターターキットを買ってみた。
一番安い送料で送ってもらった。のでこんな感じの小包の状態で届いた

さらに袋に入ってた。なんか海外って感じがするよね。

ひらいた

右下の小包はラズパイZeroの専用ケース。(要組立て)

本体、GPIOのピンは未実装。
ただし、スターターキットに全て付属しているので、はんだ付けする。

GPIOピンを付けてケースに収納した所。

なお、OS(Raspbian)自体はmicro SDに焼かれていて、そのままでも使える。
・・・が、個人的にこの使い方だとGUIいらないので、Raspbian Jessie Liteを突っ込む。
Windows10なので、Win32DiskImagerを使ってSDカードにイメージを焼いていく。
で、続いてOTGを有効にしてUSB繋いだだけでパソコンとSSHできるようにする。
0.焼いたイメージの設定ファイルを少し弄る
Windows 10なら、マウントしたmicro SDカードの直下のconfig.txtとcmdline.txtを少し修正して保存する。
・config.txt
dtoverlay=dwc2
上記1行を最終行に追記する。
・cmdline.txt
modules-load=dwc2,g_ether
上記1文を rootwait の直後に追記する。
1.OTGドライバをインストール
Raspberry pi ZeroをEthernetアダプタとして認識させるためのドライバを入れる。
わりかし便利な機能だけど、ラズパイZeroしかハード的に対応してないみたい。
RPI Driver OTG
2.mDNSをWindowsで使えるようにBonjourを入れる
プリントサービスを入れる理由は、その中にmDNSを喋ってくれるクライアントがあるから。他のところではiTunesでも入れればいいんじゃね?って言われてるけど、iTunes使わないし。どうせ起動しないなら小さいアプリのほうがいいじゃん。
※2017年1月21日現在Windows 10ではmDNSは非対応。対応しているのは類似技術のLLMNRであり、互換性はないのでいくらやってもBonjour無しでは引けない。
あとは、ラズパイゼロをパソコンのUSBに繋いで
raspberrypi.local
でpingが通るか確認すればOK。
なんか、mDNSはIPv6優先で引いてくれるらしい。
だから最悪ラズパイのipv4アドレスが同一ネットワーク内になくてもアクセスできる。
最高。
目的:
Androidデバイスから、物理スイッチのみのスピーカー・照明器具の電源制御をしたい
と言う感じなので、とりあえず全部入りのスターターキットを買ってみた。
一番安い送料で送ってもらった。のでこんな感じの小包の状態で届いた

さらに袋に入ってた。なんか海外って感じがするよね。

ひらいた

右下の小包はラズパイZeroの専用ケース。(要組立て)

本体、GPIOのピンは未実装。
ただし、スターターキットに全て付属しているので、はんだ付けする。

GPIOピンを付けてケースに収納した所。

なお、OS(Raspbian)自体はmicro SDに焼かれていて、そのままでも使える。
・・・が、個人的にこの使い方だとGUIいらないので、Raspbian Jessie Liteを突っ込む。
Windows10なので、Win32DiskImagerを使ってSDカードにイメージを焼いていく。
で、続いてOTGを有効にしてUSB繋いだだけでパソコンとSSHできるようにする。
0.焼いたイメージの設定ファイルを少し弄る
Windows 10なら、マウントしたmicro SDカードの直下のconfig.txtとcmdline.txtを少し修正して保存する。
・config.txt
dtoverlay=dwc2
上記1行を最終行に追記する。
・cmdline.txt
modules-load=dwc2,g_ether
上記1文を rootwait の直後に追記する。
1.OTGドライバをインストール
Raspberry pi ZeroをEthernetアダプタとして認識させるためのドライバを入れる。
わりかし便利な機能だけど、ラズパイZeroしかハード的に対応してないみたい。
RPI Driver OTG
2.mDNSをWindowsで使えるようにBonjourを入れる
プリントサービスを入れる理由は、その中にmDNSを喋ってくれるクライアントがあるから。他のところではiTunesでも入れればいいんじゃね?って言われてるけど、iTunes使わないし。どうせ起動しないなら小さいアプリのほうがいいじゃん。
※2017年1月21日現在Windows 10ではmDNSは非対応。対応しているのは類似技術のLLMNRであり、互換性はないのでいくらやってもBonjour無しでは引けない。
あとは、ラズパイゼロをパソコンのUSBに繋いで
raspberrypi.local
でpingが通るか確認すればOK。
なんか、mDNSはIPv6優先で引いてくれるらしい。
だから最悪ラズパイのipv4アドレスが同一ネットワーク内になくてもアクセスできる。
最高。
2016年12月28日水曜日
D言語の演算子評価順序
Twitterでこんな記事を見た。
paiza開発日誌 - ツイッターで出題した未定義問題のお詫びと調査と解説について
最近のpaiza割りと酷くて、C言語の環境依存系の問題バカスカ出してる印象がある。
(ポインタの長さ系の問題とか、sizeof(char*)==4が正解みたいなアレ)
まぁそれは置いといて、では我らがD言語さんは、言語仕様で演算子の評価順序が定義されているのか確認してみた。
公式の文書(Expressions)によれば、
というわけで、左から右へ評価される と定義されているらしい。Order Of Evaluation
Binary expressions and function arguments are evaluated in strictly left-to-right order. This is similar to Java but different to C and C++, where the evaluation order is unspecified. Thus, the following code is valid and well defined.
では実際にコードを書いて、生成されたバイナリを見てみよう。
こんなコードを書く。
そんで、次にバイナリを読む。
もっとわかりやすくしてみる。

お分かりいただけただろうか。
とにかく左から順に計算していく。
ただし、インクリメントは後置と前置では全く違うのでこのあたりを考慮してやる必要がある。
では、Paizaの問題をD言語で評価するとどうなるか。
int i=0;機械語を読むとこう評価されている模様。(後置のインクリメントは1度だけ実行)
i = i++ + i++;
i = 1+(0 + 0);というわけで、Javaだけじゃなくて、D言語も対象言語に入るよ~
Paizaさん、D言語ちゃんも仲間に入れてあげて!
登録:
投稿 (Atom)