イントラ内システムのセキュリティ

システム間連携について - Architect Life で言っていた既存のWebシステムにHttpリクエスト/レスポンスすることで、システムを変更することなく外部インターフェース(AtomAPIとか)を構築するという作業をGW明けから開始した。

外部インターフェースが全く用意されていないWebシステムなので、プログラムからHttpリクエスト/レスポンスを行ってブラウザの操作をエミュレートしている。

言語にはPowerShellを使っているんだけど、こういったプログラミングをやる時に第一関門になるのが認証をどうやって突破するかということ。ベーシック認証なら標準的な方法が用意されているから簡単だけど、ベーシック認証が採用されているシステムは業務システムではまずない。だからといってWSSE認証なんて気の効いたものに対応しているわけもない。

大抵の場合は独自の認証をやって、セッション情報をクッキーかURLにクエリとしてくっつけておくかのどちらかだと思う。

で、社内で動いているいくつかのWebシステムをハックしてみたんだけど、結構セキュリティが甘い。中にはセキュリティと呼べないものまである。

たとえばログイン情報をGETメソッドでURLのクエリとして送信しているとか、POSTメソッドで送信しているけどそもそもSSLで保護してないのでパスワードがだだ漏れとか。

これはイントラ内の仕組みだから許されている事だと思うけど、どの会社でも社内システムはそんなもんなんだろうか?

この分だとSQLインジェクションとかXSS対策とかそのへんも相当あやしそう。せめて自分が作るシステムだけはしっかりしておこうと思う今日このごろでした。

しかし、PowerShellというのは本当にたいしたもんだ。Webサイトへのハックが簡単に試せてしまうし、書いたコードをC#にコードに書き直すのにもそんなに手間はかからないので、こういった事をするのにすごく向いている。他のスクリプト言語やシェル環境ではこうはいかないと思う。スクリプティングとシェル環境がシームレスに連携しているPowerShellだからこそだと思う。PowerShellのMonoへの移植も始まっているようなので、他のプラットフォームでも使えるようになればもっと普及するだろう。