Powershell のセキュリティ@tsuda_ahr
2015/5/16
の懇親会
自己紹介
NemCa はこんな感じ
合点がいかない!
この人のせい!!
バズったコンテンツ
そして #ハレ婚の日にこんな記事が出ていてびびる
http://internet.watch.impress.co.jp/docs/special/20150307_691658.html
インターネット怖い!ガクガクブルブル (((( ;゚Д゚))
さて本題
約半年前、こんな会議が大都会でありました
そこで聞いた 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 を使おう!
ご清聴ありがとうございました
Top Related