Thursday, November 21, 2013

パスワードが漏洩しないウェブアプリの作り方 〜 ソルトつきハッシュで満足する前に考えるべきこと

■■序論

徳丸さんのスライド「いまさら聞けないパスワードの取り扱い方」に見られるように、昨今、ウェブアプリケーションの設計要件として、サーバ内に侵入された場合でもユーザーのパスワードをできるだけ保護すべきという論調が見受けられるようになってきました。

上掲のスライドでは、その手法としてソルトつきハッシュ化を勧めています。しかしながらスライドに書かれているとおり、ソルトつきハッシュには、複雑なパスワードの解読は困難になるものの、単純なパスワードを設定してしまっているユーザーのパスワードについては十分な保護を提供できないという問題があります。そして、多くのユーザーは適切なパスワード運用ができない、というのが悲しい現実です。

ソルトつきハッシュを使った手法でこのような問題が残るのは、ウェブアプリケーションサーバに侵入した攻撃者がユーザーの認証情報をダウンロードして、認証情報をオフライン攻撃することを防ぎようがない、という前提を置いているからです。

逆の言い方をすると、攻撃者がアプリケーションサーバに侵入したとしてもユーザーの認証情報にアクセスできなければ、認証情報を奪われる可能性はないわけです。そのようなシステムを構築するにはどのようにしたらいいでしょうか。

一般的なウェブアプリケーションにおける答えは、ストアドプロシージャの利用とデータベースサーバの保護にあります注1


■■ストアドプロシージャによるパスワード認証

多くのSQLデータベースサーバはストアドプロシージャとストアドファンクションをサポートしており、これはMySQLやPostgreSQLといったオープンソースRDBMSでも例外ではありません。ストアドプロシージャやストアドファンクションには二つの役割があり、ひとつは処理手順をまとめること、もうひとつは、テーブルへのアクセスパターンを限定することです。

たとえばMySQLの場合、以下のようなDDLを実行することで、一般ユーザー権限(webapp)からは読み書きできない認証情報カラムpasssalt(ソルト値を格納)とpasshash(ハッシュ値を格納)をもつuserテーブルを作ると同時に、パスワードの一致を確認するストアドファンクション(check_pw)を提供することができます。

-- テーブル定義
CREATE TABLE user (
  username varchar(255) NOT NULL,
  passsalt varbinary(255) NOT NULL,
  passhash varbinary(255) NOT NULL,
  PRIMARY KEY (username)
) DEFAULT CHARSET=utf8;

-- パスワードを検証するストアドファンクションを定義
DELIMITER |
CREATE FUNCTION check_pw(u TEXT, p TEXT) RETURNS INT
BEGIN
  RETURN (SELECT COUNT(*) FROM user WHERE username=u and passhash=SHA1(CONCAT(passsalt,SHA1(p))));
END;
|
DELIMETER ;

-- パスワードを更新するストアドプロシージャ定義
DELIMITER |
CREATE PROCEDURE update_pw(u TEXT, oldpass NEXT,newpasssalt TEXT,newpasshash TEXT)
BEGIN
  DECLARE r INT;
  SET r = check_pw(u, oldpass);
  IF r = 0 THEN
    SIGNAL SQLSTATE '45000'
      SET MESSAGE_TEXT 'incorrect old password'
  ELSE
    UPDATE user SET passsalt=newpasssalt,newpasshash=newpasshash WHERE username=u;
  END IF;
END;
|
DELIMETER ;

-- webappユーザーにusernameカラムのみSELECT権限付与
GRANT INSERT,DELETE ON db.user TO webapp@'webapp-host';
GRANT SELECT (username) ON db.user TO webapp@'webapp-host';

-- webappユーザーにストアドの実行権付与
GRANT EXECUTE ON FUNCTION check_pw TO webapp@'webapp-host';
GRANT EXECUTE ON PROCEDURE update_pw TO webapp@'webapp-host';

実際に、このデータベースに一般ユーザー権限で接続してみると、以下のように、ユーザーの作成はできるものの認証情報は読めない一方で、パスワードの検証は可能、となっていることがわかります。

% mysql -u webapp db

-- 新規ユーザー johndoe (パスワード: johnpass)を作成
mysql> insert into user (username,passsalt,passhash) values ('johndoe','abcdefg',sha1(concat('abcdefg',sha1('johnpass'))));
Query OK, 1 row affected (0.01 sec)

-- userテーブルの全カラムを読むことはできない
mysql> select * from user;
ERROR 1142 (42000): SELECT command denied to user 'webapp'@'webapp-host' for table 'user'

-- usernameカラムだけならば読むことができる
mysql> select username from user;
+----------+
| username |
+----------+
| johndoe  |
+----------+
1 row in set (0.00 sec)

-- パスワードの検証は可能
mysql> select check_pw('johndoe','johnpass');
+--------------------------------+
| check_pw('johndoe','johnpass') |
+--------------------------------+
|                              1 |
+--------------------------------+
1 row in set (0.00 sec)

-- 間違ったパスワードを指定すると検証に失敗
mysql> select check_pw('johndoe','badpass');
+-------------------------------+
| check_pw('johndoe','badpass') |
+-------------------------------+
|                             0 |
+-------------------------------+
1 row in set (0.00 sec)

このように、SQLデータベース内にパスワードの検証/更新ロジックを持たせることで、(データベースに一般ユーザー権限でアクセスするための情報が保存された)ウェブアプリケーションサーバに攻撃者の侵入を許した場合でも、パスワードの漏洩を防ぐことができます。

また、ストアドプロシージャで監査ログを出力することで、攻撃を検知したり被害範囲を特定したりといったことも可能になるでしょう。

(2013/11/27追記: このような手法を実践するにあたっては、@isidaiさんの指摘をあわせて参照の上、各自の責任において設計、実装くださいますようお願いいたします)

■■データベースサーバの保護

SQLデータベースの機能を利用してパスワードを保護する場合に考えなければならないこととして、ウェブアプリケーションサーバが攻撃者の手に落ちた場合に、そこを踏み台としてデータベースサーバに侵入されるリスクを下げるにはどうすれば良いか、という点があります。

答えは単純で、データベースサーバをウェブアプリケーションサーバとは別のネットワークセグメントに配置し、両者の間にファイアウォールを設置すれば良い注2、ということになります。ファイアウォールの役割は、ウェブアプリケーションサーバからデータベースサーバへのアクセスを正規のTCPポートを指定するもの以外、全て遮断することです注3

このように設定することで、データベースサーバの権限管理機能にバグがない限り、ウェブアプリケーションサーバを踏み台として認証情報を奪われる可能性はなくなります。

なお、言うまでもありませんが、データベースサーバを配置するネットワークセグメントをインターネットと直接接続してはいけません。理想的には、アクセス手段を厳密に規定して管理系セグメントからのみ接続可能とすべきでしょう。


■■まとめ

ユーザーのパスワードを適切に暗号化することは重要ですが(そのまとめとして徳丸さんのスライドは優れていると思います)、サーバへの侵入を前提としてアーキテクチャを設計する際には、多層防御の手法が有効になります。

本稿では、RDBMSサーバのストアドプロシージャとファイアウォールの使用を通じて、ユーザーの認証情報を多層防御するウェブアプリケーションが簡単に構成できることを説明しました。


■■余談

実は、本稿で取り上げた問題とその解は、Unixにおいてシャドウパスワードが導入された経緯の変奏曲です。Unixのシャドウパスワードとは、誰もが閲覧可能なファイル(/etc/passwd)に一方向暗号化(ハッシュ化)されたパスワードを記載しておくのではなく、攻撃者(一般ユーザー)がアクセスし得ないファイル(/etc/shadow)に認証情報を配置し、認証が必要な場合はAPIを通してルート権限で動作するプロセスに問い合わせ、/etc/shadowの内容と比較した結果を回答してもらう、という仕組みです。


注1: 厳密に言うと、RDBMSでなくても別のサーバにAPIで問い合わせるのであればなんでもいいのですが
注2: ウェブアプリケーションとデータベースが1台のサーバに同居するケースでも、OSのユーザベースの権限分離を使って同様のことは不可能ではないと思います
注3: 大規模な構成かのように聞こえるかと思いますが、Amazon AWSのRDSを使うと必然的にこの構成になるなど、実は意外と身近なものです

141 comments:

  1. Your blog was too good. i really appreciate with your blog.Thanks for sharing
    http://www.india365.org/t20-worldcup/

    ReplyDelete
  2. Very nice post and beautiful content written over here. I found myself lucky to go through it. Hope to have much more article in future like this. PLease also visit:
    Rio olympic 2016 Opening Ceremony
    Rio Olympics 2016 live streaming

    ReplyDelete
  3. Friendship Day Images 2016
    Find Happy Friendship 2016 HD Images, Quotes, SMS, Greetings and Songs. Also Pictures and Wishes for Best Friends. Best Wallpaper, Wishes and Pictures you can find.



    Raksha Bandhan 2016 Quotes
    Find Happy Raksha Bandhan 2016 Images, Quotes, Greetings and Songs. Also Pictures and Wishes for your Brother or Sister. Best Presents, Gifts Ideas and Quotes Poems.



    15 August Independence Day
    Happy Independence Day 15th of August 2016 images and pictures. Watch fireworks, events and celebrations Here

    ReplyDelete
  4. you know i found a best site and that is really a very best site but no one believe in me that it is a best site. i know this is best website if you wante to see this best website then

    ReplyDelete
  5. please go to this site as this site
    is the best site.

    ReplyDelete
  6. I have founded Minion Christmas Pictures and Images Free Download
    you can check out Minion Christmas Pictures

    ReplyDelete
  7. best site for getting various informative stuff over the net. pls do visit if you love strange things over the net.

    ReplyDelete

  8. The blog or and best that is extremely useful to keep I can share the ideas
    of the future as this is really what I was looking for, I am very comfortable and pleased to come here. Thank you very much.
    tanki online | 2048 game |
    tanki online game

    ReplyDelete
  9. Saint Patrick's Day, or the Feast of Saint Patrick (Irish: Lá Fhéile Pádraig, "the Day of the Festival of Patrick"), is a cultural and religious celebration held on 17 March, the traditional death date of Saint Patrick ( c. AD 385–461), the foremost patron saint of Ireland.

    St Patricks Day Quotes – Sayings, Messages, Verses, Blessing, Poems
    20 St. Patrick’s Day Jokes Funny Messages for Wishes
    St Patricks Day Images – Download Free Images for Saint Patrick’s Day
    Download St Patricks Day Pictures for Free

    ReplyDelete
  10. Mother's Day is a celebration honoring the mother of the family, as well as motherhood, maternal bonds, and the influence of mothers in society. It is celebrated on various days in many parts of the world, most commonly in the months of March or May. It complements similar celebrations honoring family members, such as Father's Day and Siblings Day.
    Happy Mothers Day Quotes
    Happy Mother’s Day Quotes from Daughter
    Mother’s Day Thank You Messages

    ReplyDelete
  11. Happy Mother's Day To All is a celebration honoring the mother of the family, as well as motherhood, maternal bonds, and the influence of mothers in society. It is celebrated on various days in many parts of the world, most commonly in the months of March or May. It complements similar celebrations honoring family members, such as Father's Day and Siblings Day.
    Happy Mothers Day Text Greeting
    Happy Mothers Day Daughter Images
    Happy Mother's Day greetings
    Happy Mother's Day Images
    Happy Mother's Day Messages
    Happy Mother's Day Quotes

    ReplyDelete
  12. ICC Champions Trophy 2017 Schedule has been announced and every one wants the big match between India vs Pakistan. Ind vs Pakistan live TV Channels List & Broadcasting Rights

    CCL 2017 Live Streaming

    Champions Trophy 2017 Hotstar official Live Streaming

    India vs Australia Star Sports Live Streaming

    ReplyDelete
  13. Saint Patrick's Day was made an official Christian feast day in the early 17th century and is observed by the Catholic Church, the Anglican Communion (especially the Church of Ireland), the Eastern Orthodox Church, and the Lutheran Church. The day commemorates Saint Patrick and the arrival of Christianity in Ireland, and celebrates the heritage and culture of the Irish in general. Celebrations generally involve public parades and festivals, céilithe, and the wearing of green attire or shamrocks. Christians also attend church services and the Lenten restrictions on eating and drinking alcohol are lifted for the day, which has encouraged and propagated the holiday's tradition of alcohol consumption.

    Happy St Patrick’s Day Blessings

    Happy St Patrick’s Day Image

    Happy St Patricks Day Pictures

    20 Happy St Patrick Day Quotes

    ReplyDelete
  14. nice blog thanks for sharing with us. Swastik Financial Services provides loan services in Hyderabad.
    personal loans in hyderabad

    ReplyDelete
  15. nice blog thanks for sharing with us. Swastik Financial Services provides loan services in Hyderabad.
    personal loans in hyderabad

    ReplyDelete
  16. The satta matka Original Website Provide Fast Matka Result site.

    ReplyDelete
  17. Father's Day is a 2011 American-Canadian movement horrendousness comic dramatization film composed by Adam Brooks, Jeremy Gillespie, Matthew Kennedy, Steven Kostanski, and Conor Sweeney. Fathers Day messages The film stars Adam Brooks as Ahab, a man set out to right requital on Chris Fuchman, the Father's Day Killer, an aggressor and serial killer who killed his father years back.
    https://simple.wikipedia.org/wiki/Father

    ReplyDelete
  18. Start your web hosting reseller business by choosing best reseller hosting plan in India. http://livemnc.com provides you dedicated and powerful shared hosting at

    low cost of price.

    Check our Packages now. for more info: http://livemnc.com/reseller-hosting/

    We Craft Stunning Websites, App and Digital Marketing.

    http://development.livemnc.com/

    Call: + 91-9461234545 |(Multi-channel)(LiveMNC.com)

    ReplyDelete
  19. Best Poems for on Fathers day 2017 here. Kids are always enthusiastic about fathers day, and these days kids even make baked cakes or cookies to make their day very special. For a father, when he sees his kid making efforts to make his fathers day special, is the most valuable gift for a father. Kids can write down funny fathers day poems and recite Fathers day fathers day poems from daughter . Here we have gathered best Fathers day poems from kids why not use these poems and sing for your dad? I am sure this will be the best gift for your dad. You can also check dad poems that make you cry thiese poem make your dad proud. So I would suggest you to go through, all the Fathers day 2017 poems from kids and pick the best one, that you would love to sing for your dad.

    ReplyDelete
  20. This is one of the cult game now, a lot of people enjoy playing them . Also you can refer to the game :
    animal jam 2 | five nights at freddys 2 | hotmail login

    ReplyDelete
  21. People are crazy about Startup but some bullshit Startup ideas also running these days.

    ReplyDelete
  22. This is what i was looking for thak you for sharing this amazing post. keep on posting these kind of nice post
    avast secureline vpn license
    avast secureline vpn license file
    --
    india independence day

    ReplyDelete
  23. A good informative post that you have shared and thankful your work for sharing the information. I appreciate your efforts and all the best. Got some appealing information and would like to give it a try. Applaud your work and keep sharing your information.
    https://storify.com/august2017
    https://profiles.wordpress.org/august2017calendar/
    https://goo.gl/TwkY8Q
    http://ow.ly/RWqs30dFgW6

    http://hightidefestival.org/%d0%ba%d0%b0%d0%bb%d0%b5%d0%bd%d0%b4%d0%b0%d1%80%d1%8c-%d0%b0%d0%b2%d0%b3%d1%83%d1%81%d1%82-2017/

    ReplyDelete
  24. Independence Day is an annual observance celebrated every year on 15th of August.15 august 2017 India’s Independence Day is a day of great significance for the people of India. At this day India got freedom

    ReplyDelete
  25. This is something very special and unique. I really love the concept and idea. Thank you so so much for sharing this amazing blog.

    Bluehost Discount Coupons

    ReplyDelete

  26. Your talent makes me sin! Covet, covet, covet!!!! But I will try to be happy for you. Happy that God has gifted you so! Your place really is beautiful. Thank you for sharing and inspiring!

    Being glamour

    ReplyDelete
  27. Thanks for the wonderful article. It’s really really nice. What a great idea!! You’re too smart for your own good.

    prohut

    ReplyDelete
  28. This is simply a stunning blog i love the concept and presentation. I become aw great fan of yours after reading this blog.

    knowledge wisdom

    ReplyDelete

  29. Thanks for the wonderful article. It’s really really nice. What a great idea!! You’re too smart for your own good.

    Coupon enrich

    ReplyDelete

  30. This is amazing and wonderful article. I am really impressed and must say this is an interesting article. The information given in this article is unique and superb..

    Beauty tips 4 all
    itingredients
    It Enrich

    ReplyDelete
  31. Get Cheap Web Design & Hosting Service |Best Web Design Packages

    LiveMNC is one of the best web design and hosting service provider company in India. We provide quality web hosting service for window and Linux platform.

    We Craft Stunning Websites, App and Digital Marketing.

    Best virtual private cloud server

    Cheap web design and hosting service

    Call: + 91-9461234545 |(Multi-channel)(LiveMNC.com)

    ReplyDelete
  32. کاندوم ناچ کدکس یکی از برندهای معتبر کاندوم است که انواع مختلفی از کاندوم را شامل می شود. این کاندوم ها در چین تولید شده و مارک آنها لوکال است. این برند دارای کاندوم های تاخیری، خاردار، نازک و شفاف، کلاسیک، حلقوی، اناری تنگ کننده و غیره است که برای نعوظ بهتر در مردان و تاخیر در انزال زودرس بسیار مفید هستند.
    قیمت کاندوم کدکس

    ReplyDelete
  33. پزشکان از تکنیک‌های جدیدی در درمان واریس با لیزر استفاده می‌کنند تا رگ‌های واریسی و وریدهای عنکبوتی کوچک‌تر را ببندند. گاهی اوقات لیزر به عنوان مکمل اسکلروتراپی به منظور به حداکثر رساندن نتایج استفاده می‌شود. در این روش از هیچ برش یا سوزنی استفاده نخواهد شد.

    ReplyDelete
  34. تصمیم‌گیری درباره‌ی انجام هر گونه عمل جراحی زیبایی از جمله لیپوساکشن بسیار شخصی است. هر فرد باید با در نظر گرفتن خطرات و عوارض لیپوساکشن و آگاهی و درک صحیح این روش را انتخاب کند. زیرا برای تکمیل پرونده پزشکی فرد قبل از عمل از او فرم رضایت‌نامه‌ای مبنی بر آگاهی او از خطرات احتمالی و پذیرش ریسک عمل گرفته می‌شود.

    ReplyDelete
  35. به طور کلی بالون معده روشی بی‌خطر و مؤثر در کوتاه مدت در نظر گرفته می‌شود. اما می‌تواند عوارض جانبی مرتبط با آندوسکوپی یا مواد آرام‌بخش را داشته باشد. در حدود یک سوم از افرادی که درون معده خود بالون کار گذاشته‌اند بلافاصله درد و تهوع، ریفلاکس مری، سوء هاضمه، نفخ شکم و اسهال ناشی از آن را تجربه می‌کنند.

    ReplyDelete
  36. خرید کادو ولنتاین برای خانم ها و آقایان می تواند متقاوت یا شبیه به هم باشد. ولی در بیشتر اوقات کادوی خانم ها زرق و برق زیادتری دارد و کادوی ولنتاین برای پسر هم مخصوص تر است. اگر شما هم تا به حال هدیه و کادویی برای این روز نخریده اید و یا مانده اید که چه کادویی بخرید ما به شما کمک می کنیم تا در این باره تصمیم بگیرید

    ReplyDelete
  37. I am really enjoying reading your well-written articles. Thanks for sharing this.
    Diwali Wallpaper
    Diwali Pics
    Diwali Photo
    Diwali Pictures

    ReplyDelete
  38. The article you have shared here very good. This is really interesting information for me. Thanks for sharing!
    192.168.1.1 login |gmail signin

    ReplyDelete
  39. Valuable​ ​information!​ ​Looking​ ​forward​ ​to​ ​seeing​ ​your​ ​notes​ ​posted.​ ​The​ ​information​ ​you​ ​have
    posted​ ​is​ ​very​ ​useful.​ ​Keep​ ​going​ ​on,​ ​good​ ​stuff.​ ​Thank​ ​you​ ​for​ ​this​ ​valuable​ ​information.​ ​I​ ​have
    enjoyed​ ​reading​ ​many​ ​of​ ​the​ ​articles​ ​and​ ​posts​ ​contained​ ​on​ ​the​ ​website,​ ​keep​ ​up​ ​the​ ​good
    work​ ​and​ ​hope​ ​to​ ​read​ ​some​ ​more​ ​interesting​ ​content​ ​in​ ​the​ ​future
    Mersal Movierulz HDMersal Tamilrockers HDSecret Superstar Filmywap Mersal Tamilgun Hd Mersal Tamilrockers HD Mersal Hd Video Songs

    ReplyDelete