win
Windows用ソフトウェア「イージスガード」を公開します
「イージスガード」は Windows PC 上のデータをウイルスやマルウェアの脅威から守るためのソフトウェアです。KLab は個人向けにこのソフトウェアの無償公開を開始しました。

ダウンロードはこちらから
イージスガード公式ページ(KLab サイトへ)
イージスガードには次の機能・特長があります。
- 所定のフォルダ・ファイルを保護対象として設定可能
- 許可しないプログラムからのアクセスを報告・記録する
- 許可しないプログラムからのアクセスを透過的にダミーフォルダへ誘導
- PC 環境に応じて保護設定を自動生成する
- 改変されたプログラムからのアクセスを抑制する
- 有効なデジタル署名つきのプログラムには自動的に許可を与える
イージスガードは、以前このブログでご紹介した「WinAmulet」を母体とする上位互換のソフトウェアです。WinAmulet ユーザ各位のご支援のおかげで、多くの機能を追加し大きく性能を改善したこの新しいソフトウェアが生まれました。もちろん、WinAmulet の保護設定をインポートすることも可能です。
イージスガードに使用制限はありません。多くの方に自由にご利用頂くことで、悲惨な情報流出被害発生の防止につながれば、と願っています。
(tanabe)
「WinAmulet」バージョンアップのお知らせ(2009/08/13)
新しいバージョンは「0.9.4.0」です。
旧バージョンをご利用中の方も、初めての方も、ぜひ最新の WinAmulet をお試し下さい。
・ダウンロードはこちらから
・重要なお知らせ!
■ このプログラムの概要
「WinAmulet」は、所定のフォルダに対しアクセス可能なプログラムを制限するソフトウェアです。対象フォルダ下の大切なファイルにユーザの許可しないプログラムがアクセスすることを防ぎます。
■ 主な更新内容
バージョン 0.9.3.0 -> 0.9.4.0 での主な更新内容は以下の通りです。- キャッシュ機構の実装により処理効率を改善しました
- リダイレクト処理の精度を改善しました
- ファイルオープン要求中の各プロセス名を確認できるようにしました
(tanabe)
Windowsプログラムの異常終了をトラップするコード
先日、社内でこういう話題がありました。
「Windows 上のプログラム A からソースコードのないプログラム B を起動する必要があるんだけど、プログラム B はときどき異常終了しちゃったりする。内輪用だから落ちること自体は目をつぶるとして、プログラム B が異常終了した場合にはプログラム A 側でそれを上手にハンドルしたい。良い方法はないものか」
この話に興味を感じ、異常終了を起こす短いプログラムを作ってデバッガでトレースしながらヒントを探している内にふと思いました。

このプログラムを裸で実行すると、プログラム内で処理されない例外は図のような形でシステムによって処理されます。しかし、デバッガ上でデバッギ(デバッグ対象)として実行している場合はデバッガが例外の発生を検知しそれをユーザに伝えます。つまり、デバッガの制御下にあります。
ということは「デバッガとして動作するコード」を用意しプログラム B をデバッギとして扱えば、そこで発生した未処理の例外を捕捉することができるかもしれません。 ちょっと面白そうなので試しにそういうプログラムを書いてみることにしました。続きを読む
「WinAmulet」バージョンアップのお知らせ
旧バージョンをご利用中の方も、初めての方も、ぜひ新しい WinAmulet をお試し下さい。
ダウンロードはこちらから
■ このプログラムの概要
「WinAmulet」は、特定のフォルダに対してアクセスを許可するプログラムを指定することにより、対象フォルダ下のファイルを意図しないプログラムによるアクセスから保護することが可能なソフトウェアです。
■ 更新内容
バージョン 0.9.2.0 -> 0.9.3.0 での更新内容は以下の通りです。- 内部エンジンの性能向上により稼動中の動作がさらに軽快になりました
- アクセス違反検出時には従来のバルーンメッセージに加えタスクトレイアイコンの点滅で通知します
- リダイレクト先のダミーフォルダを任意に設定可能となりました
- 旧バージョン利用中のユーザーはバージョンアップにより引き続きWinAmuletをご利用頂けます
(tanabe)
Windows用フリーウェア「WinAmulet」を公開します
・「イージスガード」公開のお知らせ (2009/10/06)
WinAmulet 上位互換の「イージスガード」を個人用フリーソフトとして公開しました。イージスガードに使用制限はありません。今後はぜひこのイージスガードをご利用下さい。
・WinAmulet 終了のお知らせ(?) (2009/08/13)
■ はじめに
私の PC には個人的なファイルをたくさん保存しているフォルダがあります。その中身は、住所録や思い出のスナップ、メールデータやちょっとした秘密のメモなどさまざまです。
ある時ふと思いました。これらのファイルを読み書きするときに使うプログラムはごく限られています。 普段自分がそれ以外のプログラムを使ってこれらにアクセスすることはありませんし、まして、たとえ Windows のシステムプログラムであっても、自分の意図とは無関係に動いているプログラムからこれらに勝手にアクセスされるのは決して気持ちの良いものではありません。
それならいっそのこと自分のフォルダへのアクセスを許すプログラムを限定してしまえばいいのではないかと思い立ち、
「あるフォルダへのアクセスが可能なプログラムを制限することのできるツール」を作ってみることにしました。それが「WinAmulet」です。まだ不具合もあるかも知れませんが、開発中の最新版をフリーソフトとして公開します。興味のある方はお試し下さい。
続きを読む
「ローカル システム アカウント」の証明書ストアへ証明書をインポートする方法
Windows のサービスプログラムを実行するためのアカウントはサービスごとに個別に指定することができます。ここでは一般のログオンアカウントのほかに、組み込みアカウントである 「ローカル システム アカウント」(LocalSystem account) を指定することができます。
サービスによっては証明書ストアへインポートずみの証明書を処理の中から参照するものもあるでしょう。その場合はサービスを実行するアカウントのストアへあらかじめ証明書をインポートしておけばよいわけですが、「ローカル システム アカウント」の場合にはどうすればよいでしょう?
あるユーザのログオンセッション内で普通にインポートを行うと、その証明書はそのアカウント専用のストアへ格納されます。しかし、ローカル システム アカウントを使って Windows へログオンすることはできません。そのため、ちょっとした工夫が必要になります。今回はその方法をご紹介します。
なお、サービス側が「実行中のアカウント自身の証明書ストア」以外を併せて参照する作りになっていれば、それに準じた操作を行うことで実用上の支障はないでしょう。それでもこの話題に興味があるっ!という方 (筆者もです^^;) にはご参考となれば幸いです。
手順 1: ローカル システム アカウントで DOS コンソールを開く
まず、管理者権限のあるアカウントでログオンし、cmd.exe を実行して下さい。 Windows 2000/ XP の場合は、そのコンソール上で下記のいずれかの操作を行うことで、ローカル システム アカウントのセキュリティコンテキストで新しい DOS コンソールを開くことができます。
※ Sc.exe は Windows 2000 には標準で含まれていません。リソースキットに含まれています。
- AT コマンドを使う方法 (XP, 2000)
これは、at コマンドから登録されたジョブが ローカル システム アカウントで稼働中の Task Scheduler サービスによって処理されることを利用した方法です。参考記事C:\>time 現在の時刻: 20:27:22.23 新しい時刻を入力してください: C:\>at 20:28 /interactive cmd.exe 新しいジョブをジョブ ID = 1 で追加しました。
指定時刻になったら新しいコンソールが開きます。開いたら at /delete で作業用ジョブを削除しておきましょう。
- SC コマンドを使う方法 (XP, 2000)
これは、SC コマンドを使って「ローカル システム アカウントで起動するダミーのサービス」を登録し、それを開始する方法です。参考記事
C:\>sc create _dummy binPath= "cmd.exe /K start" type= own type= interact [SC] CreateService SUCCESS C:\>sc start _dummy [SC] StartService FAILED 1053:
※'=' のあとのスペースに注意cmd.exe はサービスプログラムではないため sc start コマンドでサービスとして開始しようとしてもサービスサービスコントローラとの応酬に失敗し上記のエラーとなりますが、/K オプションの効果で別のコンソールがちゃんと開きます。開いたら、sc delete _dummy でサービスを削除しておきましょう。
- PsExec ユーティリティを使う方法 (Vista, XP, 2000)
PsExec は、著名な Sysinternals の Mark Russinovich 氏の手による優れたコマンドラインツールです。ここではこのツールの詳細は割愛しますが、PsExec を使うと下記の操作によりローカル システム アカウントで DOS コンソールを開くことが可能です。
# Vista で UAC を有効にしている場合には最初のコンソールを開く際に「管理者として実行」することをお忘れなく。C:\>psexec -i -s cmd.exe PsExec v1.94 - Execute processes remotely Copyright (C) 2001-2008 Mark Russinovich Sysinternals - www.sysinternals.com
Sysinternals は先年 Microsoft 傘下に収まったため、この PsExec は現在 Microsoft 社のサイトで公開されています。 PsExec のページ
手順 2: 証明書をインポートする
1: の手順によりローカル システム アカウントで DOS コンソールを開くことができればあとは簡単です。
このコンソールから mmc.exe を実行して下さい。
MMC コンソールが立ち上がったら [ファイル] メニューの [スナップインの追加と削除] から「証明書」のスナップインを「追加」します。対象とするストアの種類を尋ねられますので「ユーザーアカウント」を選択します。
MMC のコンソールルート下に追加された「証明書 −現在のユーザー」のノードを展開し、ツリー上の所定の子ノードの右クリックメニューから [すべてのタスク] - [インポート] を実行すれば OK です。
この手順でインポートした証明書は、通常のログオンアカウントからインポートを行った場合と同様に、レジストリの HKEY_USERS 配下で管理されます。
HKU\[当該アカウントのSID]\Software\Microsoft\SystemCertificates当該アカウントのセキュリティコンテキスト下では、この HKU\[SID] が、HKEY_CURRENT_USER に割り当てられます。
※ローカル システム アカウントの SID は「S-1-5-18」ですまた、証明書データの実体はファイルとして下記のパスへ配置されます。
%APPDATA%\Microsoft\SystemCertificates
※ローカル システム アカウントの %APPDATA% には下記のパスが該当します
%WINDIR%\system32\config\systemprofile\Application Data
ちなみに、上記手順で MMC 証明書スナップインの追加時に「サービスアカウント」を選択して処理を行った場合、証明書データはレジストリの HKEY_LOCAL_MACHINE 配下の下記の場所へ格納されます。
HKLM\Software\Microsoft\Cryptography\Services\ [サービス名]\SystemCertificates同じく、証明書スナップインの追加時に「コンピュータアカウント」を選択すると下記の場所へ格納されます。
HKLM\Software\Microsoft\SystemCertificates
サービス側が証明書を検索する際にこういったグローバルな場所を参照する仕様であれば、ローカル システム アカウント自身のストアへ証明書を配置する代わりにこれらを利用することが可能です。
(tanabe)
JPCERT/CCとの「脆弱性情報ハンドリング」の記録
「△△製のソフトウェア××に脆弱性が発見された」というニュースが連日のようにネットの上を行き交っています。 このブログの読者にはプログラム開発者の方も多いと思いますが、 自分の携わるソフトウェアの脆弱性を第三者から指摘された経験のある方はどのくらいおられるでしょう?
先日、筆者は「HttpLogger」というフリーソフトウェアのセキュリティホールを修正しました。 そのきっかけとなったのはJPCERT/CC(有限責任中間法人 JPCERT コーディネーションセンター)様から届いた 一通のメールでした。
それから私は同センターと連携し、10日余りの準備期間を経て修正ずみのモジュールの公開と 旧バージョンにおける脆弱性情報の開示を行いました。 この「脆弱性情報ハンドリング」と呼ばれるプロセスに関わったことは、一般的な知名度とは裏腹に 普段あまり身近な存在ではない「JPCERT/CC」の活動の一端に触れる機会を得たことを含め、 プログラム開発者として貴重な経験だったと考えています。
そこで、同センターのご理解とご協力に基づき、ここでの一連の経緯を公開することにしました。 ベンダ側の視点でのこういった記録はほとんど見かけませんので、情報として多くの方と共有できればと思います。
続きを読む
「HttpLogger」バージョンアップのお知らせ(2007/12/07)
Windows 用フリーウェア「HttpLogger」のバージョンアップを行いました。
今回の新しいバージョン 0.8.2 にはセキュリティに関する重要な修正が含まれています。 旧バージョンをご利用中の方はこのバージョンへのアップデートをお願いいたします。
HttpLogger 0.8.2 をダウンロードする
続きを読む
Windows用フリーウェア「HttpLogger」を公開します
本ソフトウェアの所作がプログラム開発時の意図とは異なるケースをこの間に何件かご報告頂いています。本ソフトウェアは公開以来ご好評を頂いており、最新の環境へ追従すべく可能な限りの保守を継続してきましたが、現時点では新たに調査・改訂を行う目処が立っておりません。そのため、大変残念ですが本ソフトウェアの公開を一時的に停止させて頂きます。ご利用者の皆様におかれましては何卒宜しくご理解・ご了承下さいますようお願い致します。
2012-11-15: お知らせ
以下の問題に対応したテスト版パッチモジュールを公開します。
この版には先日パッチを公開した「Firefox 12 以降での動作不良に関する修正」も含まれます。
md5sum [BC5250264A2A8C788794EE5D585852C4]
■ はじめに
「ええと、前に見たあのページってどこだったっけ?」
こんな経験はありませんか。
読み流すつもりでいた Web のページが心のどこかに引っかかっていたり、後にな ってから貴重な情報であることに気づいたりするのはよくあることです。
記憶を手がかりにサーチエンジン等ですんなり目的のページにたどり着ければよいのですが、 そんな時に限って該当件数が膨大になったりと思わぬ苦労をすることもありますね。
そこで、Internet Explorer / Firefox で閲覧したページを両ブラウザ上で全文検索することのできるツールを作ってみました。 なかなか便利なのでこのブログの読者の方にフリーウェアとして公開します。 「履歴検索はしたいけど Google デスクトップはいろいろ重くて・・」という方にもおすすめです。
続きを読む
Win32 プログラムのデバッグTips (1)
ひとつのプログラムを完成させるまでには、多くの場合「デバッグ」という作業が必要です。 まったくバグのないプログラムを一気に書き上げるのは難しいことですから、 プログラミングの際には実行時のエラーを見つけやすくするための工夫が必要ですし、 実際にエラーが発生した場合にはできるだけ手際よく対処したいものです。
デバッグを行う上での最初の目標である「原因の特定」を効率的に行うための ツールや流儀はプラットフォームや使用言語により一様ではありませんが、 ここではネイティブな Windows プログラムをデバッグする上で役に立つ小技をいくつかとり上げてみたいと思います。
今回は、自作のプログラムの実行中にプロセスが異常終了する状況において、 問題箇所を手早く探すための方法のひとつをご紹介します。
記事では Microsoft Visual C++ を開発環境と想定しています。
続きを読む
Vista で動くプログラムを書くために 〜UAC編〜
今年(2007年) 1 月末にマイクロソフト社が発売した Windows Vista は今なお様々な話題を集めています。 発売から半年余を経た現在、普及率はまだあまり高くありませんが、現在主流の Windows XP は 販売もサポートも次第にフェードアウトしてゆく運命にあり、今後 Windows 用プログラムの開発を行う際には Vista での動作に留意する必要があります。
Vista 初出の仕様のうち、一般のアプリケーション開発者にとって最も重要なものは次の二点と言えるでしょう。
- UAC (ユーザアカウント制御) による管理ユーザ権限の抑制
- JIS2004 対応に伴う日本語文字セットの拡張
続きを読む
Winsock API をフックする際に注意すべきこと
このブログにはこれまでに何度か Win32 API のフックに関する記事を書いてきました。 API フックを行うには通常のプログラミングとは少し異なる知識と技法が必要となることもあって 記事の大半は技術的な話題が中心でしたが、今回は本題に入る前にちょっと別の視点で考えてみることにします。
そもそも、「API をフックする」とはどういうことでしょう?
また、それによって一体なにができるのでしょう?
続きを読む
「HookDate」をバージョンアップしました
先日このブログでご紹介した Windows 用フリーウェア「HookDate」のバージョンアップを行いました。
新しいバージョンも公開しますので、よろしければご利用下さい。
ダウンロードはこちらから
続きを読む
Windows用フリーウェア「HookDate」を公開します
■ はじめに
プログラム開発にテストはつきもので、テストの際に特定の年月日でプログラムの動作を確認しなければならないことがよくあります。その場合に手っ取り早いのは「コンピュータのシステム日付を変更する」という方法ですが、Windows ではバックグラウンドで多くのプログラムが動いており、システムへの影響を予測できないためできればその方法は避けたいものです。そこで、API フックを利用して、特定のプログラムに対してシステム日付とは異なる日付を伝えるツール「HookDate」を作ってみました。
せっかくなのでこのブログの読者の方にフリーウェアとして公開することにします。
(追記)2010年06月16日:バージョン 1.0.2.0 を公開しました 続きを読む
TAP-Win32 でネットワークパケットと戯れる (前編)
■ はじめに
coLinux や OpenVPN を使ったことのある方なら仮想ネットワークアダプタ「TAP-Win32」の名前をご存知でしょう。TAP-Win32は CIPE-Win32 というプロジェクトによる GPL のオープンソースソフトウェアで、実体は Windows のカーネルモード下で動作するネットワークドライバです。
TAP は本物のネットワークデバイスのように振る舞うので、これを使って Windows 上に独立した仮想ネットワーク環境を設置することが可能です。
TAP-Win32 を自作コードから利用するための開発者向けの情報は現時点ではあまり多くありませんが、面白そうなので扱い方を調べてみました。
データリンク層以降の生のパケットデータをユーザモードのプログラムから直接操作できるためアイディア次第で応用がききそうです。
今回は手始めに TAP デバイスからデータを読み出す方法をご紹介します。
続きを読む
Windowsに土足で乱入?! 〜 API フックのための予備知識
前回の記事では Windows のイベントをフックする方法についてお話しましたが、特定の Windows API 呼び出しををフックするにはどうすればよいでしょう?
それを考えるためには、まずどのような仕組みでプログラムが API を呼び出だしているのかを調べておく必要がありそうです。
ご存知の通り、Windows API は、所定の Windows プログラムから呼び出すことの可能なエクスポート関数として OS 環境の DLL(Dynamic Link Library) 群に格納されています。そして、あるプログラムの実行に必要な API を含む DLL は、実行ファイル起動時の初期化時にプロセスへリンクされ、その後は所定の API を透過的に呼び出すことができるようになります。
DLL をプロセスへリンクするには、実行形式をビルドする際に所定のインポートライブラリをリンクしておく方法(暗黙のリンク)と、コード上ででLoadLibrary系の API を使用する方法(明示的なリンク)がありますが、前者の場合、必要な DLL + API の情報は「インポート情報」として実行ファイル内に記述されています。
実行ファイル内のインポート情報は Microsoft VisualStudio に付属するdumpbin.exeユーティリティ等で参照することができますが、この情報の実体はどういう形をしているのでしょう?また、どうすればそこへアクセスすることができるでしょう?
今回はこの点について考えてみることにしましょう。
続きを読む
Windowsに土足で乱入?! 〜 フック関数の使い方
・所定のプロセスに対する Windows メッセージの監視・捕捉
・所定のプロセスでの特定のイベントに呼応する自作コードの注入
・既存のアプリケーションの所作を変更 etc.
「自作のコードをあるプロセスに介入させる」とはどういうことでしょう?
メモリ上のモジュールイメージにアクセスしてマシン語命令を書き換えて・・という怪しげな方法もありそうですが、Windows では DLL を利用することで比較的容易にこの命題を解決できます。
続きを読む