<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>BPS株式会社 開発ブログ Beyond Perspective Solutions LTD. &#187; セキュリティ</title>
	<atom:link href="http://www.bpsinc.jp/blog/archives/category/security/feed" rel="self" type="application/rss+xml" />
	<link>http://www.bpsinc.jp/blog</link>
	<description>BPS株式会社（Beyond Perspective Solutions）のプログラマによる技術・開発などに関してのブログです</description>
	<lastBuildDate>Wed, 20 Jul 2011 08:14:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>TwitterのXSS脆弱性をついたタイムライン汚染攻撃</title>
		<link>http://www.bpsinc.jp/blog/archives/2335</link>
		<comments>http://www.bpsinc.jp/blog/archives/2335#comments</comments>
		<pubDate>Tue, 21 Sep 2010 13:25:11 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[馬場]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[脆弱性]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=2335</guid>
		<description><![CDATA[本日夕方から、TwitterのXSS（Cross Site Scripting：クロスサイトスクリプティング）脆弱性を突いた攻撃がすさまじいペースで広がっています。
私もWebで見る派なので、踏んでしまいました（それによ [...]]]></description>
			<content:encoded><![CDATA[<p>本日夕方から、TwitterのXSS（Cross Site Scripting：クロスサイトスクリプティング）脆弱性を突いた攻撃がすさまじいペースで広がっています。</p>
<p>私もWebで見る派なので、踏んでしまいました（それによりご迷惑をおかけした方申し訳ありません）。<br />
リツイートされたものを解除しようにもログインできず、公式ReTweetはWebでしか解除できないので困っています。</p>
<p>公式ReTweetの仕様上の問題点も活用した、なかなか鮮やかな手口ですね。</p>
<p>問題のツイートの一例が↓です。</p>
<pre class="brush:html">
&#60;span class="entry-content"&#62;
	&#60;a
		href="http://a.no/@"
		onmouseover=";$('textarea:first').val(this.innerHTML);$('.status-update-form').submit()"
		style="color:#000;background:#000;/"
		class="tweet-url web"
		rel="nofollow"
		target="_blank"&#62;
	http://a.no/@"onmouseover=";$('textarea:first').val(this.innerHTML);$('.status-update-form').submit()" style="color:#000;background:#000;/
	&#60;/a&#62;
&#60;/span&#62;
</pre>
<p>要するに、マウスオーバーしたら自分と同じものをつぶやくというコードですね。</p>
<p>肝の部分は↓です。</p>
<pre class="brush:html">
http://a.no/@"onmouseover=";$('textarea:first').val(this.innerHTML);$('.status-update-form').submit()" style="color:#000;background:#000;/
</pre>
<p>httpで始まる文字列はリンクに変換されますが、@の認識の仕方にバグがあったようですね。文字列の最後までがリンクURLと認識され、見事にXSSが成功しています。</p>
<p>それにしても驚くのが、感染の早さ。<br />
技術的なキモは、単純なURL判定アルゴリズムのミスですが、それをTwitter上で実施するだけでここまでのスピードで広がってしまうとは、リアルタイムなTwitterの怖いところです。</p>
<p>Twitterなので、直接的な被害はTwitter上に限られていると思いますが、どのくらい工夫した亜種が流れているのでしょうか？</p>
<p><strong>2010/09/21 22:44追記</strong><br />
該当のXSS脆弱性がひとまず修正されたようですね。<br />
また、原因になっていた公式リツイートは削除されているようです。<br />
なお、ログインする際はブラウザのキャッシュとCookieを消してからのほうが良いです。</p>
<p>基本的にXSSでパスワードが知られてしまうことはありませんが（ブラウザに保存していたら知りません）、メールアドレスの変更→パスワードリセット　を使ってパスワードを変更することは理論上可能なので、プロフィールがおかしくなっていないかチェックしておいた方が良いですね。</p>
<p><strong>2010/09/21 23:05追記</strong><br />
Twitter公式情報で、修正がアナウンスされています。<br />
日本時間22:50の時点で、全世界に修正が行き渡ったようです。<br />
<a href="http://status.twitter.com/post/1161435117/xss-attack-identified-and-patched">http://status.twitter.com/post/1161435117/xss-attack-identified-and-patched</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/2335/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Windows Server でホームディレクトリ</title>
		<link>http://www.bpsinc.jp/blog/archives/1379</link>
		<comments>http://www.bpsinc.jp/blog/archives/1379#comments</comments>
		<pubDate>Thu, 15 Apr 2010 12:36:41 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[馬場]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=1379</guid>
		<description><![CDATA[ActiveDirectory環境下でファイルサーバにWindows Serverを使っている場合、共有フォルダや自分専用フォルダを、Z:などのドライブに割り当てると便利ですね。
共有フォルダを割り当てるには、グループポ [...]]]></description>
			<content:encoded><![CDATA[<p>ActiveDirectory環境下でファイルサーバにWindows Serverを使っている場合、共有フォルダや自分専用フォルダを、Z:などのドライブに割り当てると便利ですね。</p>
<p>共有フォルダを割り当てるには、グループポリシーの「ユーザの構成→基本設定→ドライブマップ」を使うと簡単です。</p>
<p>自分専用フォルダを割り当てるには、まずそのフォルダを作成しないといけないので、ログオンスクリプトと使うと良いです。</p>
<p><strong>準備</strong><br />
\\server という名前のサーバに、usersという共有フォルダ（Unixの /home に相当）を作っておきます。<br />
一般ユーザが書き込める権限を付けておいて下さい。</p>
<p><strong>スクリプトの設定</strong><br />
グループポリシーの以下の場所で、ログオンスクリプトを設定できます。</p>
<blockquote><p>
ユーザの構成　→　ポリシー　→　Windowsの設定　→　スクリプト（ログオン・ログオフ）　→　ログオン
</p></blockquote>
<p>ここのPowerShellスクリプトで、以下のような内容のファイルを指定すると、専用フォルダが作れます。</p>
<blockquote><p>
$user = $env:USERNAME<br />
$dir = &#8220;\\server\users\$user&#8221;<br />
if (-not (test-path $dir)) {<br />
  mkdir $dir<br />
  icacls $dir /inheritance:r /grant:r $user&#8221;:f&#8221;<br />
}<br />
net use z: $dir
</p></blockquote>
<p>ポイントは icacls の行です。<br />
/inheritance:r を指定することで、親フォルダからの継承を外し、アクセス権を削除します。<br />
そしてgrant:r を指定することで、自分だけはフルアクセス権を入手できます。</p>
<p>若干面倒ですが、これでセキュリティもOKですね。<br />
（もっと良い方法があったら知りたい・・・）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/1379/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ActiveDirectoryでパスワードを変更できなくて困った</title>
		<link>http://www.bpsinc.jp/blog/archives/1165</link>
		<comments>http://www.bpsinc.jp/blog/archives/1165#comments</comments>
		<pubDate>Sat, 27 Feb 2010 00:21:35 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[馬場]]></category>
		<category><![CDATA[ActiveDirectory]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=1165</guid>
		<description><![CDATA[ActiveDirectory環境で、一般ユーザがクライアントPCでパスワードを変更するには、Ctrl+Alt+Deleteを押します。
ここでパスワードの変更を選べばパスワードが変更できるはずですが、

パスワードを変 [...]]]></description>
			<content:encoded><![CDATA[<p>ActiveDirectory環境で、一般ユーザがクライアントPCでパスワードを変更するには、Ctrl+Alt+Deleteを押します。</p>
<p>ここでパスワードの変更を選べばパスワードが変更できるはずですが、</p>
<blockquote><p>
パスワードを変更できませんでした。新しいパスワードとして指定された値は、パスワードの長さ、複雑さ、または履歴に関するドメインの要件を満たしていません。
</p></blockquote>
<p>と言われてしまうことがあります。</p>
<p>この場合は、以下を試してみます。</p>
<p><strong>「Windows2008」などの、複雑さの要件を満たすパスワードを入れてみる</strong></p>
<p>これでOKなら、グループポリシー「パスワードは複雑性の要件を満たす必要がある」が原因です。<br />
嫌なら、これを無効にします。</p>
<p>これでもだめなら、「パスワードの変更禁止期間」が邪魔をしている可能性があります。</p>
<p>デフォルトでは、1週間程度のパスワード変更禁止期間が設定されていて、1日2回変更しようとすると上記のエラーが出るようです。</p>
<p>Default Domain Policyなどで「パスワード変更禁止期間」を0日に設定すれば直りそうです。</p>
<p>どういうわけだか、パスワードのポリシーだけはドメインコントローラーのポリシーが適用されることもあるような、そんな挙動をするので、Default Domain PolicyとDefault Domain Controller Policyの両方で<br />
・パスワード変更禁止期間　→　0日<br />
・パスワードの履歴を保存する　→　無効<br />
と設定しておくと良いと思います。</p>
<p>もちろん、ユーザの設定で「ユーザはパスワードを変更できない」にチェックが入っていないか確認し、gpupdate /force を実行するか再起動しておく必要があります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/1165/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>SET NAMESが危険な理由のおさらい</title>
		<link>http://www.bpsinc.jp/blog/archives/1133</link>
		<comments>http://www.bpsinc.jp/blog/archives/1133#comments</comments>
		<pubDate>Tue, 16 Feb 2010 23:22:30 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[馬場]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=1133</guid>
		<description><![CDATA[1年くらい前に社内MLに投げた、「MySQLでSET NAMESを使ってはいけない理由」をコピペしてみます。手抜きです、はい。
赤字は注釈です。

今更ながら、「MySQLで SET NAMES を使ってはいけない」の根 [...]]]></description>
			<content:encoded><![CDATA[<p>1年くらい前に社内MLに投げた、「MySQLでSET NAMESを使ってはいけない理由」をコピペしてみます。手抜きです、はい。<br />
赤字は注釈です。</p>
<hr />
今更ながら、「MySQLで SET NAMES を使ってはいけない」の根拠のお話です。</p>
<p>下記のPHPスクリプトでは、入力値を元にSQL文を生成し、検索クエリを投げています。<br />
<span style="color:red">※sqltestというDBには、カラムnameを持つuserテーブルが存在します。</span></p>
<p>GETで渡された値はきちんとmysql_real_escape_stringをかけているので、SQLインジェクションは出来ないように見えます。<br />
しかし、<br />
http://localhost/sqltest/index.php?name=%95%5c&#8217;%20OR%201=1%20&#8211;%20<br />
にアクセスすると、全部のデータが見えてしまいます。<br />
<span style="color:red">下にあるPHPスクリプトを、localhost/sqltest/index.php として配置してください。</span></p>
<p>&#8220;SET NAMES SJIS&#8221; を実行すると、MySQLのエンコードがShift-JISになりますが、mysql_real_escape_stringはUTF-8のまま動作します。<br />
16進数で 95 5c 27 20 は、<br />
UTF-8:  (謎の文字)(バックスラッシュ)(シングルコーテーション)(スペース)<br />
Shift-JIS: (表)(シングルコーテーション)(スペース)<br />
になります。<br />
mysql_real_escape_stringは、バックスラッシュとシングルコーテーションそれぞれをエスケープします。<br />
95 5c 5c 5c 27 20<br />
MySQLは、Shift-JISとして動作するので、 (表)(\)(\)(シングルコーテーション)(スペース) と認識します。<br />
つまり、\が一つ余分に入ることで、入力値のシングルコーテーションがエスケープされなくなります。</p>
<p>マルチバイト非対応のエスケープ関数を使うのと同じ理屈で、SET NAMES は危険です。<br />
基本的に文字コード中に5Cが入るShift-JISが危険ですが、他の文字コードでも似たようなことが起こる可能性があります。<br />
mysql_set_charset(&#8217;SJIS&#8217;);<br />
なら、mysql_real_escape_stringもShift-JISとして動作するようになるので、安全です。</p>
<hr />
<pre class="brush:php">
&#60;html&#62;
&#60;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&#62;
&#60;title&#62;SQLテストページ&#60;/title&#62;
&#60;head&#62;
&#60;/head&#62;
&#60;body&#62;

&#60;form action="&#60;?php echo $_SERVER&#91;'SCRIPT_NAME'&#93;;?&#62;"&#62;
	&#60;input type="text" name="name" /&#62;
	&#60;input type="submit" value="search" /&#62;
&#60;/form&#62;

&#60;?php
	//DBに接続
	if (! $db = mysql_connect('localhost', 'sqltest', 'sqltest'))
	{
		echo 'CONNECT ERROR';
		exit;
	}
	mysql_select_db('sqltest', $db);

	mysql_query('SET NAMES SJIS');
//	mysql_set_charset('SJIS');

	//SQLを生成
	$name = mysql_real_escape_string($_REQUEST&#91;'name'&#93;);
	$sql = "SELECT * FROM user WHERE name='$name'";
	echo $sql . '&#60;br /&#62;';

	//実行
	if (! $res = mysql_query($sql))
	{
		echo "QUERY ERROR &#60;br /&#62;";
		echo mysql_error();
		exit;
	}

	echo "&#60;pre&#62;";
	while ($row = mysql_fetch_array($res)) {
		print_r($row);
	}
	echo "&#60;/pre&#62;";
?&#62;

&#60;/body&#62;
&#60;/html&#62;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/1133/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Windowsのアクセス権を初期化</title>
		<link>http://www.bpsinc.jp/blog/archives/240</link>
		<comments>http://www.bpsinc.jp/blog/archives/240#comments</comments>
		<pubDate>Tue, 16 Jun 2009 03:59:52 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[馬場]]></category>
		<category><![CDATA[アクセス権]]></category>
		<category><![CDATA[サーバ]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=240</guid>
		<description><![CDATA[Windowsのフォルダアクセス制限は複雑です。
サーバの共有フォルダにユーザごとのフォルダを作成し、それぞれに排他的なアクセス権を与える、という運用はよくあると思います。
その場合、サーバのHDD交換などの事情で全フォ [...]]]></description>
			<content:encoded><![CDATA[<p>Windowsのフォルダアクセス制限は複雑です。</p>
<p>サーバの共有フォルダにユーザごとのフォルダを作成し、それぞれに排他的なアクセス権を与える、という運用はよくあると思います。<br />
その場合、サーバのHDD交換などの事情で全フォルダを丸ごとコピーする場合などに、サーバ管理者でさえもアクセスできないという問題があります。</p>
<p>Linuxならrootで全部アクセスできるのですが、Windowsでは、Administratorsグループでも、アクセス許可を取得していないとアクセスできません。<br />
アクセス許可を取得するには、所有者の操作が必要ですが、管理者権限で一括でやりたいものです。</p>
<p>このような場合、多少強引ですが、所有者を強引に変更してしまいましょう。<br />
以下、Vista / 7 / Server 2008 / Server 2008 R2 などのOSで、管理者権限でログインしている人が、自マシン内のフォルダの所有権を変更する手順です。</p>
<div id="attachment_234" class="wp-caption alignnone" style="width: 257px"><a href="http://www.bpsinc.jp/blog/wp-content/uploads/2009/06/01.png"><img src="http://www.bpsinc.jp/blog/wp-content/uploads/2009/06/01-247x300.png" alt="プロパティを開く" title="01" width="247" height="300" class="size-medium wp-image-234" /></a><p class="wp-caption-text">プロパティを開く</p></div>
<div id="attachment_235" class="wp-caption alignnone" style="width: 297px"><a href="http://www.bpsinc.jp/blog/wp-content/uploads/2009/06/02.png"><img src="http://www.bpsinc.jp/blog/wp-content/uploads/2009/06/02-287x300.png" alt="セキュリティタブの詳細設定を開く" title="02" width="287" height="300" class="size-medium wp-image-235" /></a><p class="wp-caption-text">セキュリティタブの詳細設定を開く</p></div>
<div id="attachment_237" class="wp-caption alignnone" style="width: 310px"><a href="http://www.bpsinc.jp/blog/wp-content/uploads/2009/06/04.png"><img src="http://www.bpsinc.jp/blog/wp-content/uploads/2009/06/04-300x182.png" alt="所有者の編集" title="04" width="300" height="182" class="size-medium wp-image-237" /></a><p class="wp-caption-text">所有者の編集</p></div>
<div id="attachment_236" class="wp-caption alignnone" style="width: 310px"><a href="http://www.bpsinc.jp/blog/wp-content/uploads/2009/06/03.png"><img src="http://www.bpsinc.jp/blog/wp-content/uploads/2009/06/03-300x182.png" alt="所有者の編集を開く" title="03" width="300" height="182" class="size-medium wp-image-236" /></a><p class="wp-caption-text">所有者の編集を開く</p></div>
<div id="attachment_237" class="wp-caption alignnone" style="width: 310px"><a href="http://www.bpsinc.jp/blog/wp-content/uploads/2009/06/04.png"><img src="http://www.bpsinc.jp/blog/wp-content/uploads/2009/06/04-300x182.png" alt="所有者の編集" title="04" width="300" height="182" class="size-medium wp-image-237" /></a><p class="wp-caption-text">所有者の編集</p></div>
<div id="attachment_238" class="wp-caption alignnone" style="width: 310px"><a href="http://www.bpsinc.jp/blog/wp-content/uploads/2009/06/05.png"><img src="http://www.bpsinc.jp/blog/wp-content/uploads/2009/06/05-300x129.png" alt="新しい所有者を入力" title="05" width="300" height="129" class="size-medium wp-image-238" /></a><p class="wp-caption-text">新しい所有者を入力</p></div>
<div id="attachment_239" class="wp-caption alignnone" style="width: 310px"><a href="http://www.bpsinc.jp/blog/wp-content/uploads/2009/06/06.png"><img src="http://www.bpsinc.jp/blog/wp-content/uploads/2009/06/06-300x182.png" alt="完了" title="06" width="300" height="182" class="size-medium wp-image-239" /></a><p class="wp-caption-text">完了</p></div>
<p>以上の操作で、アクセス権をリセットに近いことができます。<br />
本当はこんなことやらずに運用をしっかりすれば良いのですが・・・</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/240/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ノートン先生</title>
		<link>http://www.bpsinc.jp/blog/archives/188</link>
		<comments>http://www.bpsinc.jp/blog/archives/188#comments</comments>
		<pubDate>Wed, 04 Mar 2009 13:29:54 +0000</pubDate>
		<dc:creator>baba</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[ネットワーク]]></category>
		<category><![CDATA[馬場]]></category>
		<category><![CDATA[Norton]]></category>

		<guid isPermaLink="false">http://www.bpsinc.jp/blog/?p=188</guid>
		<description><![CDATA[家族のPCにNorton Internet Security 2009体験版を入れてみたところ、Shurikenでのメール送受信が出来なくなりました。
POP3S/SMTPSは使えるのですが、POP/SMTPが使えない状 [...]]]></description>
			<content:encoded><![CDATA[<p>家族のPCにNorton Internet Security 2009体験版を入れてみたところ、Shurikenでのメール送受信が出来なくなりました。<br />
POP3S/SMTPSは使えるのですが、POP/SMTPが使えない状態です。インストール直後は平気だったのに、ウィルススキャンをしたらだめになったとか。</p>
<p>110番と25番許可にしたり、ファイアウォールの一番上に全部許可のルール入れたり、アプリケーション制御で信頼するアプリに登録したり、ファイアウォールオフにしたり、ノートン先生丸ごとオフにしたり、色々やっても解決せず、</p>
<p>再起動したら直りました。謎。</p>
<p>やっぱり僕はKasperskyが好きです。高いけど。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bpsinc.jp/blog/archives/188/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

