Newer posts are loading.
You are at the newest post.
Click here to check if anything new just came in.

April 25 2017

Punycode によるホモグラフ攻撃例とその回避 - remark

たとえば,以下の Go 言語コードで2つの “apple” を考える(元ネタはここ)。

package main

import "fmt"

func main() {
	for _, value := range "apple" {
		fmt.Printf("%#U\n", value)
	}
	fmt.Println()
	for _, value := range "аррӏе" {
		fmt.Printf("%#U\n", value)
	}
}

見た目では分かりにくいかもしれないが,最初の “apple” は US ASCII で2番目の “аррӏе” はキリル文字なんだそうだ。 このコードの実行結果は以下の通り。

U+0061 'a'
U+0070 'p'
U+0070 'p'
U+006C 'l'
U+0065 'e'

U+0430 'а'
U+0440 'р'
U+0440 'р'
U+04CF 'ӏ'
U+0435 'е'

現在,国際化ドメイン名(Internationalized Domain Name; IDN)については xn-- から始まる punycode を使った表記が認められている。 更に punycode を使った「ホモグラフ攻撃(homograph attack)」については以前から議論があり,少なくとも複数の言語の文字が混在する場合はブラウザ側で Unicode 文字による表記がキャンセルされる。 たとえば xn-pple-43d.com は Unicode 表記では аpple.com (先頭の а がキリル文字)だが, Chrome や Firefox といった主要ブラウザでは punycode のまま xn-pple-43d.com と表記される(試さないように)。

しかし複数言語が混在しない場合,つまり最初に挙げたキリル文字だけの “аррӏе” のような場合にはこの制約は効かない。 その言語による真っ当な名前なのかホモグラフ攻撃なのか見分けがつかないからである。 たとえば xn--80ak6aa92e.comаррӏе.com だが “аррӏе” の部分は全てキリル文字なので主要ブラウザでも аррӏе.com と表示される。

PoC として https://www.xn--80ak6aa92e.com/ が用意されているので,皆さんが使っているブラウザで(証明書の詳細情報も含めて)ドメイン名がどう表示されるか確認して欲しい。

さて,この手の攻撃の回避法だが, Chrome についてはバージョン 58 以降であれば xn--80ak6aa92e.compunycode 表記になる。 どういうロジックなのかは不明1。 Firefox については,設定の network.IDN_show_punycode 項目2 を true にすれば強制的に punycode 表記になる。

個人的には国際化ドメイン名は要らんのじゃないかと思うのだが,どうなんだろうねぇ。 果てしなく紛らわしい。

ブックマーク


  1. たとえば Chrome 58 でも「情報処理試験.jp(xn–n9q36mh1hnxuksz7wt.jp)」はちゃんと Unicode 表記になる。 [return]
  2. about:config から設定する。 “punycode” で検索すれば一発で出てくる。 [return]

April 24 2017

“regist” という単語は存在しない - remark

ちょうどspiegel/-f067ee75ff3c" title="“regist” という単語は存在しない – Der Spiegel im Spiegel – Medium">2年前に書いた記事の再掲載です。 マジで英語不得手なものですみません。


仕事で「登録って regist だっけ?」と思ってググったら,あちこちのページで「regist なんて単語は存在しねーよ,くそが!」(←超意訳)と物凄い勢いで怒られた。 正しくは “register”。この単語で動詞も名詞も表せる。

英語不得手なのでどうしてもこの手の勘違いが発生するのよ。 まぁ気が付いたら直すだけだけど。 もしくは,本当は regist は resist の typo で私は今作ってるシステムに反抗したいのかもしれない。

なんてなことはない。

ブックマーク

April 23 2017

やっとかてた

『Goプログラミング実践入門』を眺める - remark

原書のタイトルが “Go Web Programming” となっている通り,『Goプログラミング実践入門』は「Web アプリケーションまたはサービスのプログラミング」について Go 言語のコードをつかって解説している本である。 しかも「実践入門」と言うよりは基礎学習に近いものがある。 したがって既に現場でばりばりコードを書いてる人には物足りないだろう。 そういう人は(少し前に出た本だけど)オライリー・ジャパンの『Go言語によるWebアプリケーション開発』のほうがいいかもしれない。

特徴的なのが, Echo のような有名どころのフレームワークは使わず, net/httphtml/template といった標準パッケージのみで解説しているところ1。 大昔によくあった, TCP/IP の解説を C 言語コードで行ったり CGI (Common Gateway Interface) の解説を Perl のコードで行ってた技術解説本のようなノリがあってなかなか楽しく読めた。

Web アプリケーション以外でもそうだけど,フレームワークって「中身」がちゃんと分かってないと適切に使えないよね。 そういう意味ではよく出来てると思う。 個人的には context パッケージについて解説があるとなおよかったが, Go 言語 の 1.6 をベースに書かれているので無理か。

参考図書

photo
Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る impress top gearシリーズ
Sau Sheong Chang 武舎 広幸 阿部 和也 上西 昌弘
インプレス 2017-03-17
評価

IoTエンジニア養成読本 Electronではじめるアプリ開発 ~JavaScript/HTML/CSSでデスクトップアプリを作ろう プログラミング経験者がGo言語を本格的に勉強する前に読むための本 徹底マスター JavaScriptの教科書 プログラミングの教養から、言語仕様、開発技法までが正しく身につく みんなのGo言語[現場で使える実践テクニック] Elixir/Phoenix 初級②: データベースとクエリ構造体 (OIAX BOOKS) JavaScriptエンジニアが手っ取り早くReactの基礎を理解するための「超」入門書 nginx実践ガイド impress top gearシリーズ スターティングGo言語 WebデベロッパーのためのReact開発入門 JavaScript UIライブラリの基本と活用

Web アプリケーションまたはサービスについて Go 言語のコードで解説。

reviewed by Spiegel on 2017-04-23 (powered by G-Tools)

photo
Go言語によるWebアプリケーション開発
Mat Ryer 鵜飼 文敏
オライリージャパン 2016-01-22
評価

プログラミング言語Go マイクロサービスアーキテクチャ nginx実践入門 (WEB+DB PRESS plus) 改訂2版 基礎からわかる Go言語 サーバ/インフラエンジニア養成読本 DevOps編 [Infrastructure as Code を実践するノウハウが満載! ] (Software Design plus)

日本語監訳者による解説(付録 B)が意外に役に立つ感じ。 Web アプリケーションだけでなく,サーバサイドで動く CLI アプリへの言及もある。

reviewed by Spiegel on 2016-03-13 (powered by G-Tools)


  1. テストフレームワークや ORM (Object-Relational Mapping) についてはサードパーティのパッケージも紹介している。また RDBMS のドライバは標準パッケージとしては提供されないので,サードパーティのパッケージが使われている(『Goプログラミング実践入門』では PostgreSQL なので github.com/lib/pq を使用)。 [return]

April 21 2017

鳥モモ 塩焼きで
チーズオムレツからスタート

April 16 2017

GW 過ぎたらみんな忘れてるに100カノッサ - remark

んー。 要するに今回の「お祭り」は,どこぞの院生が Mastodon のインスタンスを立ち上げたらうっかりユーザが殺到しちゃって,さくらや Azure の中の人なんかも巻き込んで今に至る。 ということでおっけ?

とりあえず mstdn.jp にアカウントを作ってみた。

「世界一」とか言う割にまだ “spiegel” が取られてなかったことからしてそれほどは流行ってない感じ? 500文字なんて日本語なら小説が書けるレベルだよな。

分散型メッセージングってのは夢だよねぇ。 私は Twitter より Jabber/XMPP を連想したよ。 まぁ Mastodon は(Twitter と同じく)分類としてはマイクロブロギング・サービスになるんだろうけど。

そもそもインターネットが(現状はともかく理想としては)分散型のネットワークだし,電子メールだって Web だって分散型のサービスだ。 今世紀に入ってからなら Tor や Blockchain を含めてもいいかもしれない。 いわゆる「技術的ゲートキーパ」を迂回できるというのは大きい。

でも実際には分散型サービスって成功例があんまり無いんだよね。 みんな思いつくけど(そして作ろうと思えば作れるけど)続かない。 続けていくインセンティブが(サービス運用側に)ないから。 よほどのキラーコンテンツが登場しない限りはね(それか JK の間で流行りだすとか)。 あるいは犯罪者の巣窟になってケーサツに潰されるのもお約束(Mastodon って C&C サーバにうってつけだよねw)。

ちうわけで様子見。 GW 過ぎたらみんな忘れてるに100カノッサ。 まぁでも私のお予想はたいがい外れるので,外れたら mstdn.jp に寄付してもいいかもしれない。

自ドメインに自分専用インスタンスを設置するのはパス。 計算機リソース借りるのだって無料じゃないし Docker イメージがあるとはいえ明らかに面倒くさい(レンタルサーバにおまけでついてくるというのならともかく)。 費用対効果の観点から少なくとも個人がそこまでしてするメリットはないだろう。

一方でサービスベンダが自前でインスタンスを設置するのはあり。 Twitter と違って「名前」の問題で悩む必要がないだけでもメリットはある。 まぁ Mastodon をみんなが使っているというのが前提だけどね。

ブックマーク

April 15 2017

閉鎖するとか...
トイレ休憩中
トイレ休憩中
三線登場!
今年も首脳陣の妨害にもめげず買って嬉しい花いちもんめ
これからトランルージュに乗るですよ
ひとりでゼロ次会中

April 11 2017

鉄板餃子
アスパラベーコンからスタート

April 08 2017

早朝の中央通り
宴会中。右が昭和焼き。左が平成焼き
意地でも花見中
意地でも花見中
Older posts are this way If this message doesn't go away, click anywhere on the page to continue loading posts.
Could not load more posts
Maybe Soup is currently being updated? I'll try again automatically in a few seconds...
Just a second, loading more posts...
You've reached the end.

Don't be the product, buy the product!

Schweinderl