win
Windows用フリーウェア「WinAmulet」を公開します
あなたの大切なファイルを読み書きできるのは「あなた自身が実行したプログラム」ばかりではありません!
私の 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」を公開します
「ええと、前に見たあのページってどこだったっけ?」
こんな経験はありませんか。
読み流すつもりでいた 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」を公開します
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 を利用することで比較的容易にこの命題を解決できます。
続きを読む

