Powershell のセキュリティ (大都会ver)

Preview:

Citation preview

Powershell のセキュリティ@tsuda_ahr

2015/5/16

の懇親会

自己紹介

NemCa はこんな感じ

合点がいかない!

この人のせい!!

バズったコンテンツ

そして #ハレ婚の日にこんな記事が出ていてびびる

http://internet.watch.impress.co.jp/docs/special/20150307_691658.html

インターネット怖い!ガクガクブルブル (((( ;゚Д゚))

ちなみに私のブログで参照された記事の上位…(汗

http://ooltcloud.expressweb.jp/

さて本題

約半年前、こんな会議が大都会でありました

そこで聞いた Powershell 話。

• ほとんど忘れましたけど。

簡単に言うと

• 個人PCのセキュリティが厳しくなりました。

• Windows 7 で UAC で縛り。しかし Admin 権限がないので、解除できず。

• UAC を操作するには上司の立ち合いが必要。

• IDE とか入れられないのでプログラム組めない。

• ファイルのコピーすら満足に自動化できんじゃん?

• そうだ、Windows なら Powershell があるんじゃね?

という流れだった気がする。

やってみよう

.¥test.ps1 を実行

拒否られる

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

やっぱり拒否られる

要するにファイル指定で

スクリプト実行するためには

管理者権限を強いられる!

オワタ

\(^o^)/

ここまでが、忘年会議での話。

しかし、手入力する分には

実行できるよね?

そう、手入力はOKなわけです。

ということは

ファイル指定で実行しなければ

いける!

しかし毎度コマンドを

入力するのは面倒すぎる

そこで

Function の活用ですよ!

こんな風にスクリプトを function にまとめておく

function test() {

Get-Process

}

function test2($a) {

Write-Host "hello $a!"

}

test.ps1

Powershell を起動したときにコピペ!

あとは function を実行すれば繰り返しいける!

権限の範囲で

楽しい

スクリプトライフを!

・・・

そうじゃない!

やっぱりファイル単位で整理して、

ファイル単位で指定したい!

たとえばこんなスクリプトファイルがある

$a = $args[0]

Get-Process |

? { $_.CPU -ge $a } |

select Cpu, ProcessName, MainWindowTitle, Path |

sort cpu -Descending |

ogv

getHeavtProcess.ps1

ここがコマンドラインパラメーター

こうあってほしいが・・・

当然、現実はこう (汗

そこでこんなバッチファイルを作る

powershell -command "$a=gc -raw %1; $a='{'+$a+"'}'; $b=Invoke-Expression $a; $b.Invoke(%2); pause;"

psexec.bat

するとこう!コマンドプロンプト

バッチファイル経由で

Powershell Script が

起動できた!

バッチファイルでやっていること。

Powershell ①

-command ②

"

$a=gc -raw %1; ③

$a='{'+$a+'}'; ④

$b=Invoke-Expression $a;⑤

$b.Invoke(%2); ⑥

pause; ⑦

"

①Powershellを起動する

②-command オプションで Scriptを渡す。

③第一引数に指定したファイルをテキストで読み込む。

④スクリプトブロックにするので{ } で囲む。

⑤文字列をスクリプトブロックとして評価する。

⑥スクリプトブロックの実行。%2 をパラメーターとして渡す。

⑦確認待ち。

結果、生成・実行される Powershell Script

$a='{$a = $args[0]

Get-Process |

? { $_.CPU -ge $a } |

select Cpu, ProcessName, MainWindowTitle, Path |

sort cpu -Descending |

ogv}';

$b=Invoke-Expression $a;

$b.Invoke(10);

pause; いわゆる eval

セキュリティとは

一体なんだったのか!

権限の範囲で

楽しい

スクリプトライフを!

ここまでが、LT駆動 #10 (2015/1) での話。

ここから OSO 2015 懇親会ver

の懇親会

powershell -ExecutionPolicy RemoteSigned

そもそも、そんな謎な事しなくても・・・

Powershell の起動オプションを指定でいけるよ!

普通に使える!

いままでの苦労はなんだったのか

_| ̄|○

しかも、3年前にヒーロー島でその話聞いてた(汗

https://twitter.com/tsuda_ahr/status/183366319545131008

結論

みんな Powershell を使おう!

ご清聴ありがとうございました

Recommended