いつきコンテンツ

ヘルプ

カウンター


2011-08-08 夏休み1日目

いきなり寝過ごした件。

[日記] angelbeatsのタグ検索で18,567件@pixiv

件数表示あり&1日で8件増え。増えてるけどー……。

実際には9件位増え。新規絵は普通。

[日記] 「それからのお話」/「ボンカレー_2日目シ09b」の漫画 [pixiv](まどマギ)

久々に読みたくなっちゃったのだ。

まどマギ漫画で出てる中で、「それから」を書いた作品の中では突出して好き。

たつや、格好良すぎる!

[ネタ] 昼休みに教室でラノベ読んでる奴って何なの? 家で読めよ

昼休みに新刊チェックしたりサークルチェックしたりしてますが何か?

[ネタ] Pixivって絵のソースみると他人にIDバレバレだったのか・・・

元togetter見てきたけど、ローカルで解析できるのと、web問い合わせが必要な処理を混同してるアホが多すぎる。相変わらずのバカ発見器っぷりだな、twitter。

まぁロックかからない(何回かログインパスワード間違えた時にアカウントがロックされない)のはどーかとも思うが。これも後述するけど、結構微妙な問題を含んでる。

ID見れるってパターンは多いからあんまり気にしないけど。

あぁ、あと見えないと思ってアカウント名に個人情報突っ込んでる場合もちょっとアレだが……普通は入れないやろ。入れてる人は他のサービスでも個人情報突っ込みまくってると思われるので問題外。

ロックかかるのも、嫌がらせはできるので……webサービスの場合、ログイン時に「同時ログイン処理不可」+「ログインに時間かかる」を選択した方が良いパターンもありそう。もしくは、ロック解除時に同時ログインかけるか、どっちかかな。

ログインの時だけ5秒ほど待たせてやる、とかすると、ブルートフォース攻撃への耐性はそれなりにあると思うんだよね。

アルファベット(26文字)×6文字という、相当脆弱なパスワードですら、308,915,776パターンある。で1パターンのチェックに5秒かかるとしたら、1,544,578,880秒(中間値で772,289,440秒)必要。これだと、中間値で8938日かかる。約24.5年ね。

普通に使ってる分には十分な気がしてきた。

アルファベット(26×2文字)+数字(10文字)の組み合わせ8文字とかだと、((26x2)+10)^8=218,340,105,584,896パターン(中間値で109,170,052,792,448パターン)。1パターンのチェックに5秒かかるとすると、中間値で545,850,263,962,240秒=6,317,711,388日=17,308,798年(1730万年)ぐらいかかるようになる。

……以外と、「同時ログイン処理不可」+「ログイン時に成功しようが失敗しようが5秒強制的に待たされる」で、ロックする必要なくなるレベルなのでは……。

あー、この場合、ブルートフォース攻撃喰らってると、自分もログインできなくなるな(笑)

まぁ、秘密のパスワード併用したら「同時ログイン処理不可」だけはずれる(もちろん、秘密のパスワードが正解の場合のみ。かつ5秒制限は残る)とかにすれば大丈夫か。

いや、嫌がらせでロックされる可能性があるのはそれはそれで嫌なんですよね。気になる人のために○回以上ログイン失敗したらアカウントロックオプションはあっても良いかもしれないけど。

で、5秒は長いんじゃね? と思って1秒待ち強制と仮定してみても、26文字×6文字で約5年、英数字x8文字で346万年。

なんか、1秒強制待ち+パスワードは最低英数字8文字以上、でロックいらない気がしてきた。

ちょっと概念違うけど、イメージ的にはデータベースに最終ログイン実行時間(秒)を入れておいて、

if (id == form.id and pass == form.pass and lastlogintime < time()){ lastlogintime = time(); ログイン処理 ;}else{ lastlogintime = time(); エラー処理; }

こんなんで事足りそう。まぁ、特定IDに対するDoSは効くけど。

ID,PASSに加えて、最終ログイン試行時間を保存しておいて、その時間(秒)より後じゃないと、ログインさせない(≒1秒に1回しかログイン試行できない)って感じで。チェックにかかる時間は、上記に述べたように26文字×6文字で平均約5年、英数字x8文字で平均約346万年。

ブルートフォース攻撃を1秒未満に連続でかけたら、正解のID/PASSもエラー扱いになって本物が分からなくなると言うおまけつき。

対策はこれぐらいで良いような気はするんだよねー。

あとあれか。ディスクベースのデータベースにまともにlastlogintimeを放り込むと負荷的にえらいことになりそうなので、memcachedあたりに持たせておけばよさげ。消えたら困るクリティカルなデータではないので(ぶっちゃけ、システム全体で2秒以上保持してればそれで十分なデータのはず) いや、memcachedよりredisでログ無しモードで、有効期限設定の有効期限切れ破棄モードってのが一番問題がなさそう。

というか、pixivのログイン処理にかかる時間、結構かかる(1秒ぐらい?)なので、ロックしてなくても結局ブルートフォース攻撃されても相当時間かかるんじゃ……(パスワード8文字ぐらいでも、多分現実的な時間じゃ解けないと思う)

当然だけど、IDとパスワードが一緒とか、パスワードが辞書に載ってる単語とか、それを2個組み合わせただけとか言う、パスワードになってないパスワードを除く。それはブルートフォース攻撃じゃなくて、辞書攻撃で突破可能だw で、そういうパスワードの場合、ロックされる前に突破される可能性も十分にあるw

念のために計算。アルファベット大文字小文字+数字(26x2+10)が8文字のパスワードで、pixivが死にそうなくらい負荷をかけてみる事にする。

googleですらping値が40msecぐらいなので、さらに早い回線に繋いだとして10msec(0.01秒)で相手側の処理とパケットのやりとりが全部終わったと仮定。同時に1万スレッド立ち上げてログインパスワードを探ったと仮定(多分、これだけ同時通信かけると相手もこっちも死ぬ。てか、不正アクセスなんとか法とか営業妨害で通報される)

1秒でチェックできるパスワード数は、100×10000個。で、パスワードがランダムでブルートフォース攻撃かましたとして(辞書攻撃の場合は計算が面倒なのでパス)、アルファベット大文字小文字+数字(26x2+10)が8文字のパスワードの組み合わせは218,340,105,584,896パターン(中間値で109,170,052,792,448パターン)。パスワードがヒットするまで約半分の中間値個チェックが必要として、この値を100×10000で割ると、109,170,052秒。1263.5日ぐらい。約3.5年。

おお! 現実的な時間になった! あり得ないぐらいの超高速回線に繋いでpixiv側も全速力で回答を返してきたのを10000個同時に走らせて(秒間1千万回アクセスw)3.5年かければ多分パスワード分かるよ!!!!!!

……常識的に考えて、途中で逮捕されると思います。

この前提だと、8文字だと結構ギリギリ(つっても恐ろしい前提なのだが)なので、仮に10文字にしてみたらどうか。計算式省略するけど、平均4,857,056日位です。大体13307年な。1万3千年も秒間1千万回認証繰り返してたら、100%逮捕されます。てか、このペースだと多分1時間ぐらいでアクセス拒否喰らうかと(笑)

というわけで、どうしても不安な人は、パスワードを長くしておきましょう。辞書に載ってる単語じゃなくて、ランダムに英数字(大文字・小文字組み合わせ)で10文字もあれば、pixivのパスワードとしては十二分すぎるでしょう。

pixiv側がパスワード試行でロックしないとか関係無しに、10文字もあれば、破られる可能性はほぼ0ですよ、これ。

で、ここまで書いてみてTogetter - 「PixivのシステムによるユーザID漏洩とパスロックの未実装とadminツールについて」を読んだ。

……ブルートフォース攻撃(ブルートフォースアタック)が~とかGPGPUが~ って言ってる人、意味分かって言ってるのかな……(笑) これ、ローカルにハッシュ済みのデータがあり、かつハッシュ関数が高速化出来る(MD5とかSHA1とか)の場合、CPUじゃなくてGPU使えば、1秒で20億回とか桁違いな速度で試行できるからパスワードある程度長くても解けちゃうんだぜ? って言ってるだけであって、ネットワーク越しに1秒で20億回試行とか現実的じゃないよ。てか、不可能。1回の試行に必要なパケット長が1バイト(んなばかな)の場合でも、1秒で4G転送してます(往復分があるので2倍)状態なんだぜ?w 実際には1kバイト以上のパケットが飛び交うので、1秒で4Tとか転送して相手側もパケット到達と同時に反応返してきてますって状態。どんな状態なんだそれは(笑) 大体遅延時間とか完全無視だし。ローカルでもハードウェアのバスに直結しても不可能だろ、これ。GPU内だからこそできる芸当。

adminツールについては知らん(笑) 真偽不明なのでコメントできないってのが正解。管理用ツールだとしたら、アイタタタ……って感じではあるが。個人的には再発しなければそれで。

あと、togetterに書いてあったけど、1アカウントのパスワードを調べるんじゃなくて、大量のアカウントのパスワードを調べる(例えば、アカウント名=パスワードでひたすら認証かける)場合、そもそもアカウントロック意味無いしね。

結局ネットのアカウントを守るのは、アカウントロックでもなんでもなくて、「ランダムで長いパスワード」。これだけ。ぶっちゃけアカウントロックは(パスワードが十分長ければ)気休めレベル。あと、アカウントロックって嫌がらせ受ける可能性が。だってひたすら色んなIPからID正しいけどPASS間違ってるログインセッションを流し続ければ、正規ユーザーってログインできなくなるんだぜ?(笑)

あと、アカウントロックの問題はどうやってアンロックするか? かなぁ。タイムアウト方式だとしたらDoSが簡単に成立するし、何のキーも無しでアンロック用のコードを登録アドレスに送ってるサイトを見かけるが、あれ、人様のアカウントで連打したらメールBOXあふれそうだし、「秘密の質問」系は秘密の質問自体をロックできないという致命的問題がある(そこがロックされたらどうやってもアンロックできなくなる)上に、大抵「名前」「好きな物」とかを聞いてくることが多い。何言ってるかというと、辞書攻撃が非常に効きやすい気がするんですよね。で、一旦通ってしまうと、結局アンロックメール連打すればメールBOXあふれる or いきなりその場でパスワード再発行とかなので、それはそれで微妙な問題が。

なので、思い切ってアカウントロックせずに、長いパスワードを強制して(pixivはしてない気がするが)、ブルートフォース攻撃不可な長さにするってのも一つの戦略だと思いますよ。

長いって目安はさっき書いた前提からすると、8文字以上必須、10文字以上推奨かなぁ?(大文字小文字英数字混在の場合)

アルファベットオンリーだともっと長くなるだろうし、記号入れるともっと短くても安全なのでその辺は自分で計算しておくれ。

[ネタ] 菅総理が辞任を否定 「ほとんどの国民が望んでいない」

もう、脳内国民はいらん。

関連:菅首相、政権運営「4年があるべき姿」=普天間合意の実現目指す―衆院予算委

不信任案再提出でも、革命でも、暗殺でもいいから、さっさと表舞台から引きずり下ろせ。

[情報] マイクロソフト、8月の修正パッチは13件~インストール時の注意も

.NET Frameworkの修正パッチはコンパイルを行いながらインストールするため、インストールに時間がかかると説明。通常は10分程度で終了するというが、推奨最低ラインのスペックで稼働するシステムでは、数十分から数時間かかることもあるとしている。

しかも途中で電源落とすと色々壊れる模様。

コンパイル済みコードじゃないのかよー。と思った。なんかライセンスの関連とかなのかなぁ。

[ネタ] アイドルマスター 第2話「“準備”をはじめた少女たち」 ‐ ニコニコ動画(原宿)来ました

1週間限定無料配信!(※有料配信なし)

見たい人は気をつけて!

[日記] アニメは明日以降~

今日も多分見るけど書くのは明日以降で。

[日記] 今日の作業曲は、【ふたつのスピカ】鯨 -超音質ver- ‐ ニコニコ動画(原宿)、魔法少女まどか☆マギカ OP コネクトでした

まどマギは、頭の方に書いた漫画を読んでたら読みたくなった。

ちなみに12話を見返してしまったのは言うまでもなく……(笑)

Last Update: 2011-08-08 23:41:17

カレンダー

2003|04|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|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|11|
2013|03|05|08|
2014|01|
2015|04|05|06|07|09|10|12|
2016|01|03|05|06|10|11|
2017|06|
2018|05|08|09|10|11|
2019|04|08|
Generated by tDiary version 4.1.2 + amazon(DB Patch 0.2.1) + counter(DB Patch 0.2) + IKPatch version beta 4.0.1.
Powered by Ruby version 2.1.5-p273 with ruby-fcgi