追記

野良犬日記 2.1

RDF/RSS
この日記の検索

最近のツッコミ:


2020-05-28 (Thu) [長年日記]

_ [spam] gmail で重要フラグまで付くスパム

ぜんぜん覚えのないサイトからの登録メールとして迷惑メールが来た。

(masterclassing とか eset とかいう、ちゃんとしてるっぽいところ。)

ぼくのアドレスで登録して、名前欄のところにアヤシイ URI を付けてあるみたい。

感心したのは、これが gmail のスパムフィルタを通るだけじゃなくて、重要メールになるところ。

そうだよなー、本当に出席登録とか製品購入とかだったら重要だもん。

URI で除外しようにも、短縮サービスだろうから難しいだろうな。

これ、しばらく続くのであれば、ちょっと面倒だなあ。


2020-05-01 (Fri) [長年日記]

_ [mutt]To edit both the code and po/*.po

Mutt の開発者メーリングリストで、mutt が表示するメッセージにおける各種表記の一貫性について提案があり、「それなら」ということで、全体的にチェックしてみたい気持ちになりました。その後の経過を説明するために、拙い英語で書いておきます。

Mutt-dev members noticed some inconsistencies in mutt's messages. I'd like to review and hopefully improve them.

I can edit po/mutt.pot directly. But it will be re-generated with the code.

Is there a tool to update the source files according to my latest mutt.pot? Does gettext have something useful for my task? I can't find one.

Okay, I'll write one.

One line of change in mutt.pot would have to update one or more source files and all the *.po files. Sounds complicated? But all the necessary information is around the changed line. So it should be easy. If that's all I need.

I want more. I'd like to sort the messages in various orders or to find/replace some patterns. So mutt.pot is not in the best format. (s/msg/message/ will break everything. s/autocrypt/Autocrypt/ will affect not only the messages but also filenames.)

Then I need some kind of database. Tab-separated list is easy to process with sed and perl.

https://gitlab.com/ttakah/mutt/-/tree/l10n-review/po

Ideally, I need only two scripts:

  • review-parse parses mutt.pot (as STDIN) and generate the database (as STDOUT).
  • review-subst updates the source files.

Due to my poor skill, I can't write them as simple as they should be.

  • review-parse also duplicates *.po with .sub suffix, replacing msgid's with their sha256 values.
  • review-divide lists up the individual files to update.
  • review-subst has to be called once before review-parse, and twice after it.
    • first: replace _("messages") in the source files with their sha256s.
    • second: update the source.
    • last: update *.po.

Hmmm, I hope someone will create a simpler tool.

Anyway, I'm using mine to review mutt.pot for more consistency.


2020-04-14 (Tue) [長年日記]

_ [ahk]Gui 内の Picture は小さく ActiveX は大きくなっちゃう?

一部マシンで autohotkey gui の画像サイズが小さいと思ったら hidpi の問題でした。

dpiscaleをマイナスしてやると大丈夫でした。


2019-10-01 (Tue) [長年日記]

_ [android]普通の VideoView で普通の MP4 が再生できないとき

Android で動画再生させようと思って VideoView を使ったら、debug は大丈夫なのに release 版では「この動画を再生できません」(Can't play this video.) が表示されました。

という書き方でお分かりでしょうが、原因は build.gradle にありました。

 minifyEnabled true

を false にするだけでした。

permission を確認したり ExoPlayer に変更してみたりと、色々やったのに結局これだけでした。「一部の実機で動かない → 色々やってみる → うまくいかない → じゃあ USB で adb を見てみよう → あれ、動くじゃん」の流れは脱力しました。

ネットにあまり情報が無かったので、ここに書いておきます。

もっと丁寧にやるなら、proguard-rules.pro で

 -printusage deleted.txt

みたいに確認して、必要なものが消えていたら

 -keep class android.support.v4.media.** {*;}

のように指定して保持すれば良いみたいです。

あ、ちなみに ExoPlayer は便利ですが、終了を明示しないといけないのは単純な VideoView より面倒かな、と思いました。VideoView に setVideoURI 等をして setMediaController を付けただけの場合、listener からじゃないと中身の player が変数として出てこないほど勝手にやってくれるわけで、終了も activity 等と同時にやってくれます。一方で ExoPlayer は、ちゃんと stop して release しないと残るみたいです。activity の onStop に付けておきましたけど、onStop を通らないで死んだときは気にしなくても良いのか心配です。

追記

その後ほかのことをしていたら、なぜか再現できなくなったので、もしかすると manifest の中で

 android:extractNativeLibs="false"

にするだけで直る問題だったのかもしれません。


2019-08-14 (Wed) [長年日記]

_ [sec]https://googleprojectzero.blogspot.com/2019/08/down-rabbit-hole.html

これは夏の怪談ですね。Windows 10 最新版のサンドボックスから管理者権限を取れちゃう件。見出しごとに軽く紹介。

It all seemed clear. の部分は、NtUserPostMessage によるウィンドウ間コミュニケーションが、特権付きウィンドウなら UIPI (User Interface Priviledge Isolation) によって阻まれるはず………なのに、なぜか 0xCNNN あたりの範囲で許可されているという話。

Tracking down the culprit... は、その許可の原因を探したところ、新規ウィンドウ作成にフックされた MSCTF というライブラリだったという話。CTF が何の略かは不明。

The hidden depths reveal... は CTF が TSF の一部だという話。TSF は IME とかの関係なので日本人なら目にすることのある語。

Understanding the CTF Protocol... は CTF の複雑さの説明。デスクトップセッションごとに CTF モニタサービスが起動し、クライアントからのメッセージを処理する。あらゆるウィンドウが CTF クライアントになる。CTF は Windows 98 時代の Office XP から存在。以来ほとんど変更されていない。

Is there any attack surface? これだけ古ければ、さもありなん。アクセス制御はゼロ。サンドボックスからでさえ CTF に参加できてしまううえに、スレッド ID やプロセス ID やウィンドウハンドラも自己申告。なんなら CTF サービス側になりすますこともできる。ここでさらにやる気になって、ctftool というものを作成。

Exploring CTF with ctftool... 図に示されているとおり、wait notepad.exe と打って待つと、メモ帳の方から接続してきてくれる。そこにデータを注入できる。

Looking for bugs... で、「こんなに複雑怪奇なレガシープロトコルならメモリ破壊もいっぱいあるだろうなぁ、境界チェックや桁あふれチェックもほとんどないだろうなぁ」と言いながら脆弱性を探す。すぐに、メソッド番号を受けとるコマンドを発見。任意の数を受けとるので、どこにでもジャンプさせてくれそう。(しかも例外を CTF ライブラリが吸収してくれるから、クラッシュしないで好きなだけ試行できちゃう)

Let's find something to call... そうは言っても CFG (Control Flow Guard) のホワイトリストにあるところにしか飛べないのだけど、ひたすらメソッド番号をしらみつぶしに探して、良さげなメソッドを発見。

A note about ASLR... やっぱり ASLR はブートごとじゃ弱いみたい。さらに、スタックはプロセスごとにランダマイズされるものの、CTF の仕様から、モニタがスタックの場所を教えてくれちゃうので意味ない。

Browsing what gadgets are available... というわけでサーバのスタックは分かった。クライアントは、任意書き込みガジェットを探したけど、dec しかなかったので、任意の値になるまで回す必要がある。まあ面倒だけど、これで、あちこちガジェットを行ったり来たりしてレジスタ調整すれば、あらゆる CTF クライアントを compromise できちゃう。(メモ帳からでさえ cmd.exe を実行できる)

Making it matter... では影響の大きさを説明。アクセス制御が皆無だから Administrator を含む他のユーザのあらゆるアプリケーションを乗っとれる。さらには LockWorkStation を使えば、既に SYSTEM 権限で動いている Winlogon さえ OK。そう、Winlogon も CTF クライアントなのだ!

これだけでも SYSTEM 権限への上昇という成果だが、

The "TIP" of the iceberg... ここまでのは Windows デフォルトの話。TIP (Text Input Processors) を使うと、もっとできる。IME がインストールされていれば (有効化されていなくても)、あらゆる CTF クライアントがあらゆる (他ユーザセッションの) ウィンドウのテキストを読み書きできてしまう。メモ帳にテキストを書けるだけじゃない。Administrator のコンソールにコマンドを送りつけられる。他ユーザのログイン時にパスワードを読み取れる。サンドボックス内 AppContainer プロセスからもできる。UAC 同意ダイアログも SYSTEM 権限だ。だれでも runas で呼べて、すぐ SYSTEM になれる。

So what does it all mean? バグがなくても CTF は仕様からしてアプリケーション間の内容を読み書きし合う。そこに加えてバグがある。今後マイクロソフトがプロトコル自体を現代的にするかどうかに注目。

Conclusion 大変だったけど、20年近くだれにも気づかれなかった弱点だと分かった。

おーさむ!

本日のツッコミ(全5件) [ツッコミを入れる]

_ tamo [これっすね https://portal.msrc.microsoft.com/en-US/security-gui..]

_ tamo [ここに顛末が一部書いてある。発見者も当惑するネーミングって…… https://bugs.chromium.org/..]

_ tamo [hindsightだけど、クラッシュ連発というのは、このfixの途中だったからなのかもね https://news...]

_ tamo [https://github.com/taviso/ctftool#ctftool 今月のパッチを当てれば ctf..]

_ tamo [https://news.mynavi.jp/article/20190601-834516/ これ誤解してるなあ..]


2002|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|10|11|12|
2011|02|04|05|06|07|08|09|10|11|12|
2012|01|03|04|05|06|09|11|12|
2013|02|03|09|10|11|
2014|02|03|04|06|09|
2015|11|
2016|01|04|09|10|
2017|04|05|07|
2018|04|08|12|
2019|07|08|10|
2020|04|05|