Hatena::ブログ(Diary)

イム日記

2018-01-27

Microsoft Officeとハードリンクの組み合わせはうまくいかない

| 16:04

当方の環境

始末

起きた問題
ハードリンクしているファイルをExcelで編集したところハードリンクが切れて編集してない側が古いままとなった
原因
Microsoft Officeの仕様
対策
ショートカットシンボリックリンクを使う
参考文献
WindowsのMS Officeとハードリンク: 航海日誌 Starlog

2018-01-03

KeePass2のセキュリティに関する話

| 18:54

KeePass2のセキュアデスクトップはセキュアじゃない説

KeePass2はマスターパスワード入力時にキーロガーの捕捉を阻止するセキュアデスクトップを利用できます。

てっきりUACの機能を使っているのかと思ったら自前でそれっぽく実現しているという話を見つけました。

そうだとすると管理者権限なしにキーロガーを仕込める余地があることになります。

実際、2014年にセキュアデスクトップを回避する方法が明らかにされて、その対策をすべきだというリクエストのスレッドが立っていました。

スレッド主は1Passwordのようにプロセス監視を付けてほしいようですが、開発者はデスクトップの名前がランダムでDESKTOP_ENUMERATEを指定していないという回答にとどまっていました。

それで十分かどうかは私にはわかりません。

実行中のKeePass2からデータを抜き取る方法とその対策

実行中のKeePass2からデータを抜き取れるソフトにKeeFarceとKeeThiefがあります。

KeeFarceを使ってみましたが確かに抜き取れました。その対策について言及しているページがありました。

別のユーザーとして実行するか、管理者として実行することで通常のユーザー権限からアクセスを防げるとあります。

管理者として実行した場合は通常のユーザー権限のキーロガーから守ることも出来ます。

一方で管理者権限で実行するのは危険という話もあります。

また、別のユーザーとして実行するのはログオンが面倒である上にKeePass2を実行しているユーザーからは抜き取れることになるのでいい対策とは言えないかもしれません。

ところでKeePassXCにはDACLを使ってメモリダンプを作らせない実装があります。

これによって通常のユーザー権限からのメモリの読み取りも防げますが、同様に制限されたDACLでKeePass2を実行させると抜き取りを防げます。

上記ツールで実行させたKeePass2にKeeFarceを実行するとOpenProcessで失敗します。

私の見解

セキュアデスクトップが仮にセキュアじゃなかったとしても二段階認証を使えばすぐには復号できないのではないかと考えましたが、OtpKeyProvが思っているより解読に弱いということもあり得ます。私にはそれを検証する能力がありませんので、とりあえずないよりましだろうということでセキュアデスクトップと二段階認証を使うことにします。

データが抜き取られる対策はDACLのやつでいいだろうと思いますが、それでも抜き取る方法があるかもしれません。

あと、管理者権限が取られた場合はどのみちどうしようもないと思います。

2017-11-04

Firefoxで任意のサイトの検索BOXを検索バーに登録する

| 23:07

Add to Search Barというアドオンを入れると検索BOXを右クリックして検索バーに登録できるようになります。

アニメイトオンラインショップの例

検索BOXを右クリックして「サーチバーを追加」で追加されます。ジャンルを音楽にしておくと音楽の検索バーとして登録されます。

f:id:hotokediary:20171104230649p:image

2017-09-05

AtomでURLの部分をダブルクリックするとブラウザが開くようにする

| 06:13

このPackageを入れるとCtrl+クリックで開けるようになります。

ダブルクリックで開くようにするにはコードを下記のように変更します。

11行目

atom.workspace.activePaneContainer.paneContainer.element.addEventListener("click", function(e) {

atom.workspace.activePaneContainer.paneContainer.element.addEventListener("dblclick", function(e) {

63行目

if (e.ctrlKey || e.metaKey) {

if (true) {

2017-09-03

HTTPSのページからHTTPのリソースをXHRで取得する方法

| 23:36

出来ないかと思いましたが、Firefox 55.0.3で出来る方法がありました。

下記のサンプルはhttps://example.comで実行するとHello Worldと出ます。

(function (i) {
  var w = i.contentWindow;
  onmessage = function (e) {
    if (e.source === w)
      alert(e.data);
  };
  i.sandbox = 'allow-scripts';
  i.src = 'data:text/html,%3Cscript%3Evar%20a%20%3D%20new%20XMLHttpRequest%3Ba.onload%3Dfunction()%7Bparent.postMessage(a.responseText%2C%22https%3A%2F%2Fexample.com%22)%7D%3Ba.open(%22get%22%2C%22http%3A%2F%2F1mu.info%2Fjunk%2Fhello.txt%22)%3Ba.send()%3C%2Fscript%3E';
})(document.body.appendChild(document.createElement('iframe')));

尚、Data URIの内容は下記のようになっています。

<script>
var a = new XMLHttpRequest;
a.onload = function () {
  parent.postMessage(a.responseText, "https://example.com");
};
a.open("get", "http://1mu.info/junk/hello.txt");
a.send();
</script>

Chromeだと混在コンテンツとしてエラーが出ます。この方法はFirefoxでも近いうちに使えなくなるかもしれません。

別の手段としてiframeではなくpostMessage用ページを開く方法を考えました。

この方法はChrome 60.0.3112.113とFirefox 55.0.3で動作しました。今後使えなくなるかどうかはわかりませんが、ユーザーのクリックを待つのと新規タブを開いておく必要があるのであまりいい方法ではないと思います。

下記のサンプルはhttps://example.comで実行したあとページのどこかをクリックするとHello Worldと出ます。

document.addEventListener('click', function () {
  var w = open('http://1mu.info/junk/postmessage.html');
  onmessage = function (e) {
    if (e.origin === 'http://1mu.info' && e.source === w)
      alert(e.data)
  };
});