The Man Who Fell From The Wrong Side Of The Sky:最新 5 日分

[最新版] [一覧] [前月] [今月] [翌月]

2018/5/22(Tue)

[やきう] 完封負け

前節の巨人戦で筒香復活したようにみえたけど、どーせドームの温度が首のヘルニアによかったか痛み止め入れたかで、巨人も菅野はまだしも田口野上は弱点のインハイへの速い球無いから参考記録よな思ってたら、やっぱりハマスタ戻ってきたら全然ダメやな。

つーかメッセ菅野にまったく勝てないのもだけど、引退寸前の山井を去年ノーノーでリハビリし延命させ今年もしっかり完封されるし同じ相手に負け過ぎや、試合はじまる前から結果わかってほんとつまらん。

[セキュリティ] SpectreNG

SpectreNGだとさ、 CVE-2018-3640(Variant3a)はええとして CVE-2018-3639(Variant4)の方でまたさらに速度下がるってて大草原。


2018/5/21(Mon)

[NAS] IO-DATA HDL-Z4WS

去年くらいに退役させたWindows Storage Server 2008R2採用のNASである IO-DATA HDL-Z4WSについて、ひとつ思い出したことあるので書いておこう。

この機種ってQNAPのOEM製品でTS-459 Proとほぼ同一製品だというのは 導入時にも記事にしたんだけど、マシンスペックがAtom D510/2GBと非力過ぎてWindows Updateにも困るレベルだもんでUSBメモリ起動で OpenMediaVaultFreeNASでも動かせばええやんくらいに思ってたんだけど *1、どうせなら QTS(QNAPカスタマイズによる組込Linux)を動かそうとしてる人もいたのよね、5ch(旧2ch)の このスレ918とか。

ただこの報告にもあるようにQTSから起動するとHDD1〜2が認識せず実質2ベイモデルとしてしか使えないという問題があるらしい、分解すると一部基板のシルクに「TS-459 WSS」の文字があるのでそもそもハードウェア仕様が異なるのが原因なんじゃないかなんて解析記事もヒットする。

でもこれそんな大層な問題じゃないと思うんよな、そもそも基板が違うったってフロントのアクセスランプ周りだけっぽいし。

何より自分がDebianベースの GPartedというLive USBから起動した時はちゃんとHDD1〜4まで全部認識してATA Secure Eraseも問題なく完走したんだよね、ちょっと記憶があやふやだけど

というデバイス名で見えてて、さっきのレスにあるHDD1が/dev/sdivとして認識されるとかHDD2は見つからないとかいう問題はなかったんよね、ということでQTSの問題としか思えん。

最初は起動スクリプトかどこかに機種名とベイ数の対応表をハードコードで持ってて、「TS-459 WSS」の場合はそもそもQTSを動かすこと想定してないので2ベイモデルにフォールバックしてるのでは?と考えて、GPLなんだしソース読めばええやんという話で ダウンロードしてみたんだけど

$ grep -ri "TS459" .
./hdparm-6.1/hdparm.c:#elif defined(TS259) || defined(TS459) || defined(TS559) || defined(TS659) || defined(X86_SANDYBRIDGE) || defined(X86_CEDAVIEW) || defined(X86_EVANSPORT)
./hdparm-6.1/hdparm.c:#elif defined(TS259) || defined(TS459) || defined(TS559) || defined(TS659) || defined(X86_SANDYBRIDGE) || defined(X86_CEDAVIEW) || defined(X86_EVANSPORT)
./hdparm-6.1/hdparm.c:#elif defined(TS259) || defined(TS459) || defined(TS559) || defined(TS659) ||  defined(X86_SANDYBRIDGE) || defined(X86_CEDAVIEW) || defined(X86_EVANSPORT)
./hdparm-6.1/hdparm.c:#elif defined(TS259) || defined(TS459) || defined(TS559) || defined(TS659) ||  defined(X86_SANDYBRIDGE) || defined(X86_CEDAVIEW) || defined(X86_EVANSPORT)
./hdparm-6.1/Makefile:        MODEL_FLAG = -DTS459

のようにhdparm(ハードディスクのパラメータ取得/設定コマンド)のコードにQNAPでカスタマイズした機種依存のコードがあるにはあるんだけど、2〜6ベイモデルのTS[2456]59で区別は無い上に、割愛するけどifdefの中身もキャッシュ制御と省電力関係のコードだけで無関係っぽいのよね。

これ以上原因調べるならUSB-DOM入手してQTS入れるかだけど結構お高いのでパス、普通のUSBメモリで代用できるならやらんでもないんだけどね。

ところでQNAPって最近はLinuxベースのQTSだけでなくFreeBSD + ZFSベースの QES(QNAP Enterprise Storage)なんて載せた機種も出してるのね、GPL vs CDDL問題で今更ながらFreeBSDの採用が増えるなんて案件があるんだなぁと。


*1:結局もろもろめんどくさくなってWindows Storage Serverのまま使い続けてしまった、MS Security EssentialがライセンスOKだったというのも大きい


2018/5/18(Fri)

[プログラミング] ひたすら MiniDLNA(ReadyMedia) のコードにダメ出ししていく(その3)

前回の続き。

@ Time Of Check To Time Of Use(TOCTTOU)とは何か?

プログラマーでもないとTOCTTOU(トックトゥー)という用語には馴染みないだろうけど、日常生活でも普通に発生する問題なのよね、↓が典型。

要するに

というやつ。

これは椅子に座るという一連の動作(Transaction)が ACIDでいうとこの

を欠いているから発生するのよね。

あっこいつアシッドとか原子心母とかいいだしましたよ LSDキメてPink Floyd でも聴いてるんですかね通報。

でだ、UNIXの仮想ファイルシステム(Virtual File System)ってやつもそのへんダメダメ *1なんですな、というかマジで「Unix VFS ACID」で検索したら LSDキメるとOSをUnixに変えたくなるという謎スレがヒットするんですが、お前らいい加減にしろ。

@ TOCTTOUを利用したシンボリックリンク攻撃の一例

それでは実例を見てみよう、シンボリックリンク攻撃として最も有名(最古?)である CVE-1999-1388、SunOS 4.1.x の passwd(1) が一般ユーザ権限で /etc/passwd を上書きすることが可能(つまりroot権限を奪える)だった脆弱性。

当時の 惨OS のコードはワイには参照する術が無いので、ベースとなってる 4.1cBSD の src/bin/passwd.cを読んでみる。

 17 char    passwd[] = "/etc/passwd";
 18 char    temp[]   = "/etc/ptmp";
...
 30 main(argc, argv)
 31         char *argv[];
 32 {
...
 53         while (((pwd = getpwent()) != NULL) && strcmp(pwd->pw_name, uname))
 54                 ;
 55         u = getuid();
 56         if (pwd == NULL || (u != 0 && u != pwd->pw_uid)) {
 57                 printf("Permission denied.\n");
 58                 exit(1);
 59         }
 60         endpwent();
...
128         /*
129          * The mode here could be 644 except then old versions
130          * of passwd that don't honor the advisory locks might
131          * sneak in and mess things up.  If we could believe the
132          * locking were honored, then we could also eliminate the
133          * chmod below after the rename.
134          */
135         fd = open(temp, FWRONLY|FCREATE|FEXLOCK|FNBLOCK, 0600);
136         if (fd < 0) {
...
139                         fprintf(stderr, "password file busy - try again.\n");
...
142                 exit(1);
143         }
...
145         if ((tf = fdopen(fd, "w")) == NULL) {
146                 fprintf(stderr, "passwd: fdopen failed?\n");
147                 exit(1);
148         }
149         /*
150          * Copy passwd to temp, replacing matching lines
151          * with new password.
152          */
153         while ((pwd = getpwent()) != NULL) {
...
165                 fprintf(tf,"%s:%s:%d:%d:%s:%s:%s\n",
166                         pwd->pw_name,
167                         pwd->pw_passwd,
168                         pwd->pw_uid,
169                         pwd->pw_gid,
170                         pwd->pw_gecos,
171                         pwd->pw_dir,
172                         pwd->pw_shell);
173         }
174         endpwent();
175         if (rename(temp, passwd) < 0) {
176                 fprintf(stderr, "passwd: "); perror("rename");
177                 unlink(temp);
178                 exit(1);
179         }
180         chmod(passwd, 0644);
181         fclose(tf);

ざっとこのコードを説明すると

という流れ、ただこれ一時ファイルは /tmp に作られるわけでもないし一般ユーザ権限じゃ /etc にシンボリックリンクなんざ貼れないしどう攻撃すればいいのかさっぱり判らんよね。

なのでヒントを探しにもう一度 CVE-1999-1388 を読んでみると

  passwd in SunOS 4.1.x allows local users to overwrite arbitrary files via a symlink attack and the -F command line argument.

とある、ん? 4.1cBSD の passwd(1) にはそもそもオプションスイッチなんざ存在しないんですが…

  NAME
         passwd - change login password

  SYNOPSIS
         passwd [ name ]

そこで当時の SunOS 4.1.xのマニュアルで確認すると

  OPTIONS
  	-F filename
  		Treat filename as the password file

とあって passwd(1) には 惨OS 独自の拡張機能が施されていて この-Fオプションは /etc/passwd でなく任意のファイルを指定して編集が可能だったということ。 なんやこれ、chroot(2) の座敷牢に置く /etc/passwd の編集用にこんなヤバい機能つけたんですかねこれ…

このデンジャラスな機能のために passwd(1) が4.1cBSDから改造されてたんであれば以下のシナリオで /etc/passwd を上書き可能ちゅーことですな。

と恐ろしくも簡単な手順で攻撃可能だったのではないんですかねこれ…

上記の操作を実行すると

となり、/etc/passwd を一般ユーザー権限でお好みの内容に置換えてしまえるって寸法。

そもそも passwd(1) が

という仕様だからでもあるんだけど、この件に関しては 前回ちょっとだけ触れたケーパビリティーなどによる特権の分割も役に立たんのがアレ、なんせ権限の本丸だからな /etc/passwd は。

ちなみにソース考古学に必須である古い商用UNIXのドキュメントは The BITSAVERS.ORG Documents Libraryに紙をePub化したものがあって大変便利、いつもの Ancient UNIXだとソース公開されたものしかないからねぇ。

他にも Center for Computer Historyでお賽銭程度の有償で買えたりもするんだけど、SunOS 5.1のUser Manual買ったら半分しか無くてワイぶち切れですわ。

@ 次回

じゃあどうすればこの攻撃は避けられたかを書く予定、だがいつになるかは知らん(飽きた)。


*1:まぁWindowsも TxF捨てたし多少はね?

[音楽] Now, Now/AZ

新曲すこ、おっぱい眼鏡ことJess Abbott(Tancred)が脱退してもNow, Nowは変わらなくて安心したというかCacie Dalagerちゃん歌めっさ上手くなったな、アルバム「 Saved」買わないとなぁ。来日はまぁ諦めてます。


2018/5/17(Thu)

[やきう] 二連勝

メッセには完封目前でいつもの阪神のファストフードかと思ったんだが、さすがに一割打線とロサリオが試合中にサッカーすれば連勝するんやね(しろめ)。

野手はソトロペス宮崎だけでやきうやっとるけど、去年の桑原筒香戸柱梶谷倉本で300打点稼いでようやくギリAクラス滑り込みなのに、今年はその半分でも御の字だとするとまぁBクラス転落よな。

チーム防御率がトップといっても東とか防御率低い先発ほどムエンゴ、そして中継ぎはマシンガン継投で夏場に落ちるのは確実、得点力不足でソト外せなくなるとエスコパットンどっちか二軍、守備も補強したわりに良くなってないし今だけなんやな。


2018/5/16(Wed)

[書籍] Tom Wolfe/The Right Stuff

トム・ウルフ死去、映画「 ライトスタッフ」の原作を書いた人、中公文庫から出てた 邦訳ってもう何十年廃刊状態なんですかねクソが。

映画はチャック・イェーガーとマーキュリー・セブンの対比で描かれてるけど、原作はその選考法に反発し辞退するも後にニュー・ナインとしてニール・アームストロングらと同期で宇宙計画に参加したピート・コンラッド(後のアポロ12号船長)からの視点で描かれてたりの違いもあるので、映画しか観てない人はどうにかして入手して読んでどうぞ。


[ホームへ] [ページトップへ]