2008年11月8日土曜日

タスクスケジューラのログファイルの場所@WindowsServer

WindowsServer のタスクスケジューラは色々細かい設定ができて便利、よく活用してる。
これの豆知識っぽいネタ。
 

コントロールパネルのタスクを開いた状態で、[詳細設定]→[ログの表示]とやるとタスクの実行ログ、「SchedLgU.Txt」というファイルが開く。Windowsでは少々珍しく、32KBでサイズ固定の循環ログファイルだ。
 

しかし「SchedLgU.Txt」を検索しても出てこない、どこにあるのか気になってヘルプを見たら書いてあった。
 
このファイルは SchedLgU.txt という名前で \Windows\Tasks フォルダにあります。最近実行されたタスクを表示するには、SchedLgU.txt ファイルで、「***** 一番最近のエントリはこの行より上にあります *****」を検索します。このテキストのすぐ上にあるエントリが最近実行されたタスクです。

さよか、要は下記にあるということでいいんだ。
%SYSTEMROOT%TASKS\SchedLgU.txt
↓(大体の環境ではこうだろう)
C:\WINDOWS\TASKS\SchedLgU.txt

Tasks フォルダは特殊だからエクスプローラーからでは見えないだけだったのか。
DOS窓からDIRコマンドでファイル一覧を出すと、ちゃんと「SchedLgU.txt」がいる。
 

エディタでパスを指定して直接開くことも可能、これなら走査してイベントゲット監視も出来ないことは無いな。

2008年11月7日金曜日

Google Chromeのシークレットモード

何かと話題の Google Chrome にはシークレットモード がついている。
 

[caption id="attachment_1035" align="alignnone" width="397" caption="画像:シークレットモード"]画像:シークレットモード[/caption]
 

履歴の残らない、誰にもナイショのWEBアクセスができるぞ、と言うことなんだが。(出し方は→こちら)
 
 
 

なんというか… コイツに見られている感が常にするのが実にイヤ。[caption id="attachment_1036" align="alignnone" width="240" caption="画像:シークレットアイコン"]画像:シークレットアイコン[/caption]
 
こっち見ないでおくれよ。

IISのアプリケーションプールを開始するVBScript(WMI)

IISのアプリケーションプールが勝手に止まったりする事あります?
滅多に無いけどたまにある。そうか、わかるよ多分わかる。
 

止まっているアプリケーションプールを検出して自動で開始してくれるスクリプトを書いたのでエントリ。スケジュールタスクに登録して適度な間隔で実行すれば、簡易IIS監視体制の完成。
拡張子"vbs"で保存して実行してください、コマンドラインから実行もできるのでわりと便利。
[sourcecode language='vb']
strComputer = "."

set locatorObj = CreateObject("WbemScripting.SWbemLocator")
set providerObj = locatorObj.ConnectServer(strComputer, "root/MicrosoftIISv2")

Set colItems = providerObj.ExecQuery _
("Select * From IIsApplicationPoolSetting")

For Each objItem in colItems
if objItem.AppPoolState="4" Then
set nodeObj = providerObj.Get("IIsApplicationPool='" & objItem.name & "'")
nodeObj.start
end if
Next
[/sourcecode]

 

止まった原因はちゃんと調べたほうがいいけど、取りあえず動いておいて欲しいのも人情。
応用として、WQLにWhere句を使えば狙ったアプリケーションプールのみを監視できる。
(※Where name = 'hogehoge' とか name like ''%hoge% とか)
 

解説は参考情報を見てもらえると詳しく書いてあります、というかほぼMSDNからコピペ組み立てですけど。

2008年11月6日木曜日

iptablesでお手軽なssh総当りログイン試行攻撃対策

有用だと思ったのでメモ、元ネタチェインつきで。
 

元ネタ
sshへの辞書攻撃をiptablesで防ぐ (曖昧スラッシュ)
↑
の元ネタ
sshへの総当り攻撃をiptablesの2行で防ぐ方法 (blog@browncat.org)
↑
の元ネタ
Block brute force attacks with iptables (Kevin van Zonneveld)
 
 

sshに対する攻撃といえば、ブルートフォースや辞書によるログインの試行が代表的、secureログが汚れるわ最悪ログインされるわと大迷惑(事故?)だ。
そもそも不要な接続は許可しないべきなんだけど、接続元のIPアドレスを限定するという事がしづらい場合もある。
 
 

2行の iptables コマンドでSSH攻撃対策をしよう



※テストに使ったOS,バージョン → CentOS5.2+iptables v1.3.5
recentモジュールが必要なので"/proc/net/ip_tables_matches"ファイルに
recentという行があることを確認

iptablesの簡単設定で、一定時間内に複数回ssh接続してきたIPを自動で拒否するようにできる、という情報を見つけたので記事にする。
以前誰かがfail2ban を設定していたのは見たことある。やれることは大体同じのはずだけど、細かい設定とかを管理したいならそちらがいいかもしれない。
 
 

引用すると下記2行でOK(※ eth0 の部分は環境による)。はみ出した分はどっかにコピペで…
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP

これで 60秒間に8回のssh接続を仕掛けてきたIPアドレスからの新規TCPセッションを拒否するようになる。
 

ぱっと見では2行目だけで良さそうな気もするが、recentモジュールの使い方がそうなっているのかな。
これでセーブしておけばOSの起動時にもルール有効になり、対策OK。
ほか、初代の元ネタBlock brute force attacks with iptables (Kevin van Zonneveld) に色々注意事項が書いてある、試すなら cron で iptables をリセットしとけとかは面白い記述。
 
 


攻撃されたことをログに残そう


コレだけだとほんとに転載しただけなので芸が無い、とりあえずログに残るようにしておこう。
また、一つ目の元ネタsshへの辞書攻撃をiptablesで防ぐ (曖昧スラッシュ) によると、デフォルトのINPUTチェインを使うだけでは他の通信に遅延が出る恐れが。確かにそうなるかもしれない。
 
幸い、色々考慮済みの iptables のテーブルが前述の元ネタに紹介されている。折角なので パクリ 再現してみよう。
 

実行するiptables のコマンドは下記、セーブなど考慮して無いので注意。
# ssh接続を取りあえずユーザチェインに渡す
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j SSH_ACCEPT
 
# SSH_ACCEPTチェインの設定、条件マッチでSSH_BFAチェインに渡す
iptables -A SSH_ACCEPT -m recent --set --name SSH_ACCEPT
iptables -A SSH_ACCEPT -m recent --rcheck --seconds 60 --hitcount 5 --rttl --name SSH_ACCEPT -j SSH_BFA
 
# SSH_BFAチェインの設定、ログに書き出してドロップ
iptables -A SSH_BFA -j LOG --log-tcp-options --log-level 4 --log-prefix 'iptables: ssh_bfa:'
iptables -A SSH_BFA -j DROP

 

で、出来たテーブルがコレ。
OK、元ネタ にほぼそっくりだ。これで遅延無し、攻撃者のIPがログに残るiptablesのルールが完成。
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
SSH_ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
 
Chain SSH_ACCEPT (1 references)
target prot opt source destination
all -- anywhere anywhere recent: SET name: SSH_ACCEPT side: source
SSH_BFA all -- anywhere anywhere recent: CHECK seconds: 60 hit_count: 5 TTL-Match name: SSH_ACCEPT side: source
 
Chain SSH_BFA (1 references)
target prot opt source destination
LOG all -- anywhere anywhere LOG level warning tcp-options prefix `iptables: ssh_bfa:'
DROP all -- anywhere anywhere

閾値は60秒当たり5回になった。ほか recent が update から rcheck になったが違いがよく分からないな。
 

気になるところとしては、LOGのルールがちょっと違う。
「LOG flags」って箇所がよく分からなかった。TCPフラグで判断する仕様なのかと思ったが、手元の iptables の man ではそれっぽいオプションが見当たらなかったので、代わりに tcp-options を入れた。
ログが詳細になったが、意図するところは多分違うかもしれない。

続・アクセスログの保存期間は3ヶ月を目安にすればいいんじゃないか

ちょっと前のエントリ、「アクセスログの保存期間は3ヶ月を目安にすればいいんじゃないか」の続き。
 


つい先日まで知らなかったんですが、PCI DSS(PCIデータセキュリティ基準)というのがあります。
米国でやっているクレジットカード業界の認定らしい。認定って言うとセキュリティ関連のISMS(ISO27001) や プライバシーマーク 等が思い浮かぶけど、考え方は似たようなものです。
 
ただそれらに比べると、とても技術重視なことが特徴といえるんじゃないでしょうか。←※さわりをちょっとかじった感想なので参考までに。
 

ITProから一部引用
CI DSS(Payment Card Industry Data Security Standard)は,情報セキュリティの向上を目的としたクレジットカード産業の業界基準である。
 
PCI DSSは,クレジットカードのカード情報および取引情報を保護するために,次に示す六つの目的と,それに関する12のデータ・セキュリティ要件を定めている。

 

ほか、PCI DSSの詳しい内容はITProがきっちりまとめてくれています、運用管理者は是非一読を。

ITPro:セキュリティ基準「PCI DSS」
http://itpro.nikkeibp.co.jp/article/COLUMN/20080407/298166/


 
 

PCI DSSでは要件がすごく具体的


なぜこのPCIDSSを記事に引っ張ってきたかというと、示されている用件がとても具体的で有用な定義だと思ったから。
 

どのように具体的か紹介しておきます、分かりやすいので他社さん(日本オフィス・システム株式会社)の記事から引用させてもらいます。「PCIDSS-ISMSとどこが違うのか」が参考になりました。

  • リモートアクセスのユーザー認証では二要素認証を導入する

  • パスワードの伝送・保管はすべて暗号化する

  • 休眠ユーザーは90日ごとに取り除く

  • パスワードは90日ごとに変更する

  • 直近4回は同一パスワードの使用は不可

  • 連続したアクセス試行は6回以内に制限

  • ロックアウトは30分

  • セッションアイドル時間は15分以上でパスワード入力にする

あふれんばかりの具体性ですね、さすがにお金がらみはシビアです。
 
が、お手本にするにはもってこいですね。
PCIDSSにあげられている要素を並べ、取捨選択。それに適当に期間を設定するだけでとてもセキュリティ管理の行き届いたシステムになることでしょう。
 
 

アクセス・ログを3カ月間保管しなければならない(タイトル引用→引用元)


ようやく本題?
前回提唱した「アクセスログは3ヶ月保存で定義しとけばいいじゃない」に関連したPCIDSSの要件は↓な感じ。

10.7 監査証跡履歴は,少なくとも1年は保管,最低3カ月間はオンラインで閲覧利用できるようにする。

 

ここでも目安として3ヶ月という期間が出てくる。
実は ITProの見出し「3ヶ月間保管」につられ、得たりとばかりに記事を書き始めてしまったが、クレジットカード的には1年保管しろという事のようだ。これでは趣旨が変わる?
 

しかし、いつもお金(取引・決済)関係のように気を使うシステムを作っているわけで無いためここは大きく解釈してみる。
「サーバ本体=1次ストレージ」、「ログ保管場所=2次ストレージ」 とした場合、1次に3ヶ月、2次を含めて1年というという事で妥当な感じがする。
PCIDSSの要件的には最初の3ヶ月時点で「集計済み・閲覧しやすい状態」が求められている気がするが、まあそれは置いとこう。awstats でも logparser でも何でもあるから。
 

2次ストレージを利用するかはシステムの要件次第という事で、基本は「1次ストレージに3ヶ月保管」というポリシーで運用すればよい、とすればやっぱり「ログの保管は3ヶ月でOK」 という結論を仕立てあげることが出来る。
 
 

1年保管はどうしてもログがかさばってしまうので出来ればやりたくない。
OSの初期設定とかもこういうニーズにあわせてあると後で困らなかったりするのになぁ。

2008年11月5日水曜日

plink.exe pscp.exe で Windowsコマンドラインからssh、scp

Windowsコマンドプロンプトから急にLinuxサーバにファイルの転送がしたくなった。
同様に、突然ssh経由でログインしたくなった。
 

そんな機会もあろうかと、有名なsshクライアントのputtyにはおまけが付いている。
plink.exe , pscp.exe がそれだ。単純にコマンドラインから ssh/scp がやりたければ十分なツールだ。
 

たまに使うので記事にしておく、適当なところに設置してパスを通しておくと便利かも。
 
 

sshクライアント plink.exe (PuTTY Link)


大まかな使い方は ssh コマンドと一緒。ヘルプを載せておく。
機能はイマイチ、Screen などのユーティリティもh上に変な動きになるが、動作確認程度として考えたら十分だ。コマンド叩いてくるだけのような使い方でもよい。
※機能十分なクライアントが使いたければ putty.exe を叩けばいい。
 
PuTTY Link: command-line connection utility
Release 0.60
Usage: plink [options] [user@]host [command]
("host" can also be a PuTTY saved session name)
Options:
-V print version information and exit
-pgpfp print PGP key fingerprints and exit
-v show verbose messages
-load sessname Load settings from saved session
-ssh -telnet -rlogin -raw
force use of a particular protocol
-P port connect to specified port
-l user connect with specified username
-batch disable all interactive prompts
The following options only apply to SSH connections:
-pw passw login with specified password
-D [listen-IP:]listen-port
Dynamic SOCKS-based port forwarding
-L [listen-IP:]listen-port:host:port
Forward local port to remote address
-R [listen-IP:]listen-port:host:port
Forward remote port to local address
-X -x enable / disable X11 forwarding
-A -a enable / disable agent forwarding
-t -T enable / disable pty allocation
-1 -2 force use of particular protocol version
-4 -6 force use of IPv4 or IPv6
-C enable compression
-i key private key file for authentication
-noagent disable use of Pageant
-agent enable use of Pageant
-m file read remote command(s) from file
-s remote command is an SSH subsystem (SSH-2 only)
-N don't start a shell/command (SSH-2 only)
-nc host:port
open tunnel in place of session (SSH-2 only)

 
 

scpクライアント pscp.exe (PuTTY Secure Copy client)


これも scp コマンドと似たような使い勝手。ヘルプのっけるだけでも大体分かるな。
 

PuTTY Secure Copy client
Release 0.60
Usage: pscp [options] [user@]host:source target
pscp [options] source [source...] [user@]host:target
pscp [options] -ls [user@]host:filespec
Options:
-V print version information and exit
-pgpfp print PGP key fingerprints and exit
-p preserve file attributes
-q quiet, don't show statistics
-r copy directories recursively
-v show verbose messages
-load sessname Load settings from saved session
-P port connect to specified port
-l user connect with specified username
-pw passw login with specified password
-1 -2 force use of particular SSH protocol version
-4 -6 force use of IPv4 or IPv6
-C enable compression
-i key private key file for authentication
-noagent disable use of Pageant
-agent enable use of Pageant
-batch disable all interactive prompts
-unsafe allow server-side wildcards (DANGEROUS)
-sftp force use of SFTP protocol
-scp force use of SCP protocol

2008年11月4日火曜日

Windows上でRPMパッケージを展開する

「RPMの中身が見たい、でも手元にLinuxがない!」
 

自宅にLinux環境を置いてないのが悪いんだが、ブログ記事を作るときにたまに困る。
Linux系のネタでは、 Google Notebook にメモってから後で記事に起こすということをよくやるが、細かいところでRPMを展開して確認することがある。
 
 

RPMの展開は意外と有名な多機能アーカイバでは対応していない、下記のツールで展開する事ができる。

XacRett(公開サイトのトップはこちら)
http://www.kmonos.net/lib/xacrett.ja.html


 
 

使い方はいたって簡単。任意のRPMパッケージを XacRett.exe にドロップすればデスクトップに展開される。
デフォルトのコンフィグファイルとか、バイナリのインストールパスとかの確認で使っています。
 
なお、 XacRett.exe を直接起動すると展開先の指定ができる、デフォルトのデスクトップから変更したい場合などは指定したらよいでしょう。(.ini ファイルができます。)
 
 

折角なのでRpmForgeのrpmforge-releaseを展開してツリーを見てみた。
rpmforge-release-0
├─etc
│ ├─apt
│ │ └─sources.list.d
│ │ rpmforge.list
│ │
│ ├─pki
│ │ └─rpm-gpg
│ │ RPM-GPG-KEY-rpmforge-dag
│ │ RPM-GPG-KEY-rpmforge-dries
│ │ RPM-GPG-KEY-rpmforge-matthias
│ │
│ ├─smart
│ │ └─channels
│ │ rpmforge.channel
│ │
│ ├─sysconfig
│ │ └─rhn
│ │ sources.rpmforge.txt
│ │
│ └─yum.repos.d
│ mirrors-rpmforge
│ rpmforge.repo
│
└─usr
└─share
└─doc
└─rpmforge-release-0.3.6
mirrors-rpmforge.yum
RPM-GPG-KEY-rpmforge-dag
RPM-GPG-KEY-rpmforge-dries
RPM-GPG-KEY-rpmforge-matthias
rpmforge.apt
rpmforge.smart
rpmforge.up2date
rpmforge.yum

なるほど。