SlideShare une entreprise Scribd logo
1  sur  41
わんくま同盟 東京勉強会 #96
「ちょうだい」「あいよ」で学ぶHTTPの基礎とセキュリティ
がる
わんくま同盟 東京勉強会 #96
自己紹介
• 本名が古庄道明、Webでは「がる」というハン
ドルでふらついております
• 本職は技術者。現役プログラマーやってます
• あわせて設計とかインフラとか教育とか(占い
とかイベンターとか)色々やってます
• 引っかかりやすいGoogle向けキーワードとし
ては「古庄道明」「エンジニア 親方」「エンジニ
ア 禅」「がる」あたりでしょうか。
わんくま同盟 東京勉強会 #96
本稿の目的
• 「今日1日、一切HTTPとは関わりませんでし
た」がそろそろ難しくなってきた程度に、HTTP
は身近になってきました
• が、割とちょいちょい「落とし穴」があり、割と
折々に「そこに落ちている」ニュースを以下略
• 落とし穴に、回避方法について「考察できる」
基礎知識をお話できれば、と思っています
わんくま同盟 東京勉強会 #96
HTTPのド基本:通信は「1往復紙芝居」
鯖
ちょうだい
あいよ
わんくま同盟 東京勉強会 #96
リクエスト
レスポンス
鯖
わんくま同盟 東京勉強会 #96
URL
HTML(とか)
鯖
わんくま同盟 東京勉強会 #96
URL.html
HTML(とか)
鯖
A
p
a
c
h
e
わんくま同盟 東京勉強会 #96
URL.php
HTML(とか)
鯖
A
p
a
c
h
e
P
H
P
わんくま同盟 東京勉強会 #96
HEAD
BODY
HEAD
BODY
鯖
A
p
a
c
h
e
P
H
P
わんくま同盟 東京勉強会 #96
HTTPのド基本2:GETとPOSTの違いと「大体の」方向性
• ちょうだい(request)には、GETとPOSTの二
種類があります
• GETは…
– URLパラメタとして貼り付けられる事も多い
• URLを伝えると「同じ情報」が(多分)見れる
• 所謂「ログインフォーム」をGETにすると………
– 「リソースの取得」:ようはreadのイメージ
– 環境変数によってプログラムに受け渡されること
が多い
• ので、長さ制限があるケースが多い
わんくま同盟 東京勉強会 #96
• POSTは…
– 表向きは、投げるデータが見えない
• requestのbodyにデータが書かれている
– 「リソースの書き込み」もよくある
• 「投稿」とか「入力」とか
– 標準入力(stdin)によってプログラムに受け渡され
ることが多い
• ので、長さ制限はあまりない
• けど、おかげでDoS的な事は可能
わんくま同盟 東京勉強会 #96
HTMLとCSSの解釈&画像とかがどうやって表示されるのか
• 一度目の「ちょうだい」「あいよ」では、まず
「HTML」を取得します
• HTMLの中を頭から解釈していきます
– <link rel="stylesheet" href="hoge.css">
• CSSが外部ファイルだから「ちょうだい」「あいよ」
– <script src="hoge.js">
• JavaScriptが外部ファイルだから「ちょうだい」「あいよ」
– <img src="hoge.jpg">
• 画像が外部ファイルだから「ちょうだい」「あいよ」
わんくま同盟 東京勉強会 #96
• さて…では実際に「1枚のPage」でどれくらい
の「ちょうだい」「あいよ」が繰り返されるでしょ
うか?
– おいちゃんところのPageでは、自慢じゃありませ
んが1setで足ります(笑
– では「真っ当な」Pageだと…
• ヒドイと100超えますねぇ…
• この辺は「チューニング」の文脈でも重要です
– 1Pageあたり「同時に2(~6)接続」まで
• 紳士協定です! 破ると石斧が飛んできます(笑
わんくま同盟 東京勉強会 #96
チューニングほんのり指針
• CSS
– importで以外と「ちょうだいあいよset数」増加
– 出来れば「1ファイルにまとめる」!
• JavaScript
– 同じく「出来れば1ファイルにまとめる」!
• 画像
– 特にアイコンに注意(数が多いから…)
• 複数画像を1枚に(CSS スプライト)
• <img src="data:image/png;base64,...>なんて書式も
わんくま同盟 東京勉強会 #96
• ソーシャルメディア連携の部品に注意
– 「ブログパーツ」とかいいます
– FacebookとかTwitterとかとつなげるやつ
– iframe使ってることが多いので、「ちょうだいあい
よ」のセット数が増える
わんくま同盟 東京勉強会 #96
いわゆる「認証」でログインしてみる
• IDとパスワードを付けて「ちょうだい」
• 認証できたんでその結果を「あいよ」
• (さっき認証したしなぁ)MyPageを「ちょうだい」
• ………あんただれ?
わんくま同盟 東京勉強会 #96
• HTTPは「一往復完了完結」のやりとりです
• つまり「さっきの情報」とかないです!
全ては「今」だけ、なのです!
• 格好良くいうと、こ~ゆ~のを「stateless(状態
を持たない)」といいます
– このためにサーバの負担が少なく、相対的に「少
量のサーバで大量のアクセス」が捌けます
• …でも認証できなくない?
わんくま同盟 東京勉強会 #96
• 割と有名な「BASIC認証」の場合
– IDとパスワードを付けて「ちょうだい」
– 認証できたんでその結果を「あいよ」
– IDとパスワードを付けて「ちょうだい」
– 認証できたんでその結果を「あいよ」
• 毎回「IDとパスワードを流す」事で片付けます
– わりと力業です(苦笑
わんくま同盟 東京勉強会 #96
• 通常は「セッション」を使う事が多いです
– IDとパスワードを付けて「ちょうだい」
– 認証できたんでその結果を「あいよ」+割り符
– (割り符を付けて)「ちょうだい」
– 割り符が識別できたんでその結果を「あいよ」
• この「割り符」を、「セッションID」といいます
わんくま同盟 東京勉強会 #96
割り符の所在
• Cookie って呼ばれる所にある事が多いです
– 「URLに付ける」やり方もあって、Doxxmoのガラ
ケーとかが「Cookie使えない」んで使われてまし
たが、大変に危険でした
• 場所的には「ちょうだい」と「あいよ」のhead部
分にそれぞれ、Cookie用の領域というか書式
があります
– 「ちょうだい」では、自分が持ってるCookieを渡す
– 「あいよ」では、「このCookie持っといて」ってデー
タがくる
わんくま同盟 東京勉強会 #96
• ちょっと暗転
– 「他人の割り符」を盗んだり推測したり
↓
– (不正に入手した)割り符を付けて「ちょうだい」
– 割り符が識別できたんでその結果を「あいよ」
• 何がおきるでしょう?
わんくま同盟 東京勉強会 #96
セッションをクラックしてみる
• 割り符とはいっても文字列です
• 例) セッションIDは2桁の数字です
• 例) セッションIDは128桁の16進数です
• どっちがクラックしやすいでしょう?
• 「絶対にクラックできない」のはどちらでしょ
う?
わんくま同盟 東京勉強会 #96
• ログインセッションは「不可侵」ではありません
• 後は「どれくらいの確率で破られるか」です
– まぁセキュリティはどこまでも「確率」ですが
• HTTPは機構的に「認証などのstatueを持つ
には不向き」なのを無理矢理に実装している
ので、それなりに気をつけないと「簡単になり
すます」事ができます
わんくま同盟 東京勉強会 #96
hiddenの値を書き換える系のクラック
• hiddenは「HTMLの中にあって、見えない情
報」です。
• 入力フォームなんかで割と見かけます
– 入力Pagaをちょうだい
• あいよ
– (情報入力して)確認Pageをちょうだい
• あいよ
– 完了Pageをちょうだい
• …入力データは?
わんくま同盟 東京勉強会 #96
• 正しい入力フォーム
– 入力Pagaをちょうだい
• あいよ
– (情報入力して)確認Pageをちょうだい
• あいよ:hiddenに入力されたデータ
– 完了Pageをちょうだい
• (hiddenに情報入ってるから処理完了)あいよ
わんくま同盟 東京勉強会 #96
• 正しい入力フォーム(くわしく)
– 入力Pagaをちょうだい
• あいよ
– (情報入力して)確認Pageをちょうだい
• (データチェックして問題なければ)あいよ
hiddenに入力されたデータ
– 完了Pageをちょうだい
• (hiddenに情報入ってるから処理完了)あいよ
わんくま同盟 東京勉強会 #96
• 暗転した入力フォーム
– 入力Pagaをちょうだい
• あいよ
– (情報入力して)確認Pageをちょうだい
• (データチェックして問題なければ)あいよ
hiddenに入力されたデータ
– (hiddenの中身を書き換える)
– 完了Pageをちょうだい
• (hiddenに情報入ってるから処理完了)あいよ
• ………あれ?
わんくま同盟 東京勉強会 #96
• hiddenも含めて、全ての外部入力は「不適切
な内容」の可能性があります
– 前述のCookieも「ユーザのHDDにデータがある」
んで書き換えが可能です
• 「常にstateless」で、1往復使い切りの通信で
あることを、しっかりと肝に銘じておきましょう
• いわゆる「普通の」プログラムと同じように考
えると、思いがけない所からクラックされます
わんくま同盟 東京勉強会 #96
DNSポイゾニング基礎
• 前提として「TPC」と「UDP」を抑えておきます
– TCPは「信頼があるけどちょっと重い」
– UDPは「軽い、早い」を重視
• DNSは「ドメイン名をIPアドレスに変換する」
サービスで、インターネットの裏側としては「最
重要クラス」のブツになります
わんくま同盟 東京勉強会 #96
• DNS通信の基本
– このドメインのIP ちょうだい
– (IPを)あいよ
• もうちょい丁寧に
– このドメインのIP ちょうだい(識別番号123)
– 識別番号123、このIPで あいよ
• 識別番号は「1台のサーバが沢山質問をする」から、ど
の質問かを識別する用途
わんくま同盟 東京勉強会 #96
• DNSその2:多段構造です
• 「www.wankuma.com」を知りたい
– 「com」を問い合わせ
– 「wankuma.com」を問い合わせ
– 「 www.wankuma.com」を問い合わせ
• 毎回だと面倒だし通信コストもかかるので、実
際には適宜キャッシュします
わんくま同盟 東京勉強会 #96
• 「www.wankuma.com」を知りたい
– 「com」を問い合わせ
• 「com」を管理してるDNSサーバをキャッシュ
– 「wankuma.com」を問い合わせ
• 「wankuma.com」管理DNSサーバをキャッシュ
– 「www.wankuma.com」を問い合わせ
• 「www.wankuma.com」のIPをキャッシュ
• TTL、という値で「データの寿命」を管理
わんくま同盟 東京勉強会 #96
ちょっと暗転
• 一部切り出し
– 「wankuma.com」のIPをちょうだい:識別123
– 識別123:このIPだよ あいよ
• 「wankuma.com」管理DNSサーバをキャッシュ
• 暗転
– 「wankuma.com」のIPをちょうだい:識別123
– 識別123:このIPだよ あいよ(嘘サーバ)
• 「wankuma.com」管理DNSサーバをキャッシュ
わんくま同盟 東京勉強会 #96
• DNSの「ちょうだい」「あいよ」はUDP
• そのため、攻撃側は
– キャッシュさせたい鯖Aに「問い合わせ」を投げる
– 鯖Aは「問い合わせ」をどこかに問い合わせる
– 攻撃側は「偽装した"あいよ"」を鯖Aに投げる
– 鯖Aは「偽装した"あいよ"」を受け取って、嘘情報
をキャッシュしてしまう
• 識別子、16ビットなんで65536通りなの orz
わんくま同盟 東京勉強会 #96
CSRF
• くろすさいとりくえすとふぉーじぇり、といいます
• 幾分面倒な仕組みなのですが、割としゃれに
なんない問題を抱えるので、ちょっと前、割と
スポットライトがあたってました
– 古くは「ぼくはまちちゃん」というアタックで
– 少し前だと「脅迫的な書き込みでの誤認逮捕」が
わんくま同盟 東京勉強会 #96
CSRF仕組み
犠牲者A
悪意ある鯖
掲示板
1
2
4
3
わんくま同盟 東京勉強会 #96
• 1)攻撃者のサーバのPageにアクセス
• 2) レスポンス
– 中には、iframeなどで(3)のURLが書いてある
• 3) iframeなどに従って、掲示板にアクセス
– GETパラメタなどに「脅迫文」が書いてある
• 4) 掲示板は「書き込みをした」旨をレスポンス
– iframenのサイズが0だったりすると見れない orz
わんくま同盟 東京勉強会 #96
CSRFの怖いところ
• 「お前のIPからの書き込みだからお前が書い
たんだ!」って言われちゃう orz
• iframe経由とはいえ「正当なルートからのアク
セス」なのでCookie(割り符)が届いちゃうので
「本人として」色々、宜しくない行動を強要させ
られちゃう orz
わんくま同盟 東京勉強会 #96
おまけ
• あなたの知らない世界
– または「事実は小説よりも奇なり」
• とあるゲーム作成での、実話です
• いわゆる「アプリ」なので
– ガジェットが「ちょうだい」して
– サーバが「あいよ」します
• ガジェットを「front」っていう事があります
わんくま同盟 東京勉強会 #96
• がちゃを引く
– front:「がちゃを引く」処理を内部で行う
– front: 鯖に対して「このカードを引いた」で通信
• 通信情報は「ユーザのID」と「カードのID」
– 鯖:指定されたユーザに対して、指定されたカード
の付与を行う
• …ユーザが「悪意をもって」パラメタを偽装した
ら?
– 「お高いカードID」とか指定したくありません?(笑
わんくま同盟 東京勉強会 #96
まとめ
• httpは「シンプルに作る」ことで、スケーラビリ
ティなどに大変優れたプロトコルです
• ただ「鬼ほどにシンプル」なので、本来できるこ
とは少ないです
• そこに「山盛りの下心」を現在盛り込んでいる
ので(認証とか)。設計者が気をつけないと、危
険な香りが「むせっかえる」くらいに漂います
• 「ちょうだい」「あいよ」を理解して、付け入る隙
間にはちゃんとパテを埋めましょう!!!

Contenu connexe

En vedette

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

En vedette (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Httpの基礎とセキュリティ

  • 2. わんくま同盟 東京勉強会 #96 自己紹介 • 本名が古庄道明、Webでは「がる」というハン ドルでふらついております • 本職は技術者。現役プログラマーやってます • あわせて設計とかインフラとか教育とか(占い とかイベンターとか)色々やってます • 引っかかりやすいGoogle向けキーワードとし ては「古庄道明」「エンジニア 親方」「エンジニ ア 禅」「がる」あたりでしょうか。
  • 3. わんくま同盟 東京勉強会 #96 本稿の目的 • 「今日1日、一切HTTPとは関わりませんでし た」がそろそろ難しくなってきた程度に、HTTP は身近になってきました • が、割とちょいちょい「落とし穴」があり、割と 折々に「そこに落ちている」ニュースを以下略 • 落とし穴に、回避方法について「考察できる」 基礎知識をお話できれば、と思っています
  • 10. わんくま同盟 東京勉強会 #96 HTTPのド基本2:GETとPOSTの違いと「大体の」方向性 • ちょうだい(request)には、GETとPOSTの二 種類があります • GETは… – URLパラメタとして貼り付けられる事も多い • URLを伝えると「同じ情報」が(多分)見れる • 所謂「ログインフォーム」をGETにすると……… – 「リソースの取得」:ようはreadのイメージ – 環境変数によってプログラムに受け渡されること が多い • ので、長さ制限があるケースが多い
  • 11. わんくま同盟 東京勉強会 #96 • POSTは… – 表向きは、投げるデータが見えない • requestのbodyにデータが書かれている – 「リソースの書き込み」もよくある • 「投稿」とか「入力」とか – 標準入力(stdin)によってプログラムに受け渡され ることが多い • ので、長さ制限はあまりない • けど、おかげでDoS的な事は可能
  • 12. わんくま同盟 東京勉強会 #96 HTMLとCSSの解釈&画像とかがどうやって表示されるのか • 一度目の「ちょうだい」「あいよ」では、まず 「HTML」を取得します • HTMLの中を頭から解釈していきます – <link rel="stylesheet" href="hoge.css"> • CSSが外部ファイルだから「ちょうだい」「あいよ」 – <script src="hoge.js"> • JavaScriptが外部ファイルだから「ちょうだい」「あいよ」 – <img src="hoge.jpg"> • 画像が外部ファイルだから「ちょうだい」「あいよ」
  • 13. わんくま同盟 東京勉強会 #96 • さて…では実際に「1枚のPage」でどれくらい の「ちょうだい」「あいよ」が繰り返されるでしょ うか? – おいちゃんところのPageでは、自慢じゃありませ んが1setで足ります(笑 – では「真っ当な」Pageだと… • ヒドイと100超えますねぇ… • この辺は「チューニング」の文脈でも重要です – 1Pageあたり「同時に2(~6)接続」まで • 紳士協定です! 破ると石斧が飛んできます(笑
  • 14. わんくま同盟 東京勉強会 #96 チューニングほんのり指針 • CSS – importで以外と「ちょうだいあいよset数」増加 – 出来れば「1ファイルにまとめる」! • JavaScript – 同じく「出来れば1ファイルにまとめる」! • 画像 – 特にアイコンに注意(数が多いから…) • 複数画像を1枚に(CSS スプライト) • <img src="data:image/png;base64,...>なんて書式も
  • 15. わんくま同盟 東京勉強会 #96 • ソーシャルメディア連携の部品に注意 – 「ブログパーツ」とかいいます – FacebookとかTwitterとかとつなげるやつ – iframe使ってることが多いので、「ちょうだいあい よ」のセット数が増える
  • 16. わんくま同盟 東京勉強会 #96 いわゆる「認証」でログインしてみる • IDとパスワードを付けて「ちょうだい」 • 認証できたんでその結果を「あいよ」 • (さっき認証したしなぁ)MyPageを「ちょうだい」 • ………あんただれ?
  • 17. わんくま同盟 東京勉強会 #96 • HTTPは「一往復完了完結」のやりとりです • つまり「さっきの情報」とかないです! 全ては「今」だけ、なのです! • 格好良くいうと、こ~ゆ~のを「stateless(状態 を持たない)」といいます – このためにサーバの負担が少なく、相対的に「少 量のサーバで大量のアクセス」が捌けます • …でも認証できなくない?
  • 18. わんくま同盟 東京勉強会 #96 • 割と有名な「BASIC認証」の場合 – IDとパスワードを付けて「ちょうだい」 – 認証できたんでその結果を「あいよ」 – IDとパスワードを付けて「ちょうだい」 – 認証できたんでその結果を「あいよ」 • 毎回「IDとパスワードを流す」事で片付けます – わりと力業です(苦笑
  • 19. わんくま同盟 東京勉強会 #96 • 通常は「セッション」を使う事が多いです – IDとパスワードを付けて「ちょうだい」 – 認証できたんでその結果を「あいよ」+割り符 – (割り符を付けて)「ちょうだい」 – 割り符が識別できたんでその結果を「あいよ」 • この「割り符」を、「セッションID」といいます
  • 20. わんくま同盟 東京勉強会 #96 割り符の所在 • Cookie って呼ばれる所にある事が多いです – 「URLに付ける」やり方もあって、Doxxmoのガラ ケーとかが「Cookie使えない」んで使われてまし たが、大変に危険でした • 場所的には「ちょうだい」と「あいよ」のhead部 分にそれぞれ、Cookie用の領域というか書式 があります – 「ちょうだい」では、自分が持ってるCookieを渡す – 「あいよ」では、「このCookie持っといて」ってデー タがくる
  • 21. わんくま同盟 東京勉強会 #96 • ちょっと暗転 – 「他人の割り符」を盗んだり推測したり ↓ – (不正に入手した)割り符を付けて「ちょうだい」 – 割り符が識別できたんでその結果を「あいよ」 • 何がおきるでしょう?
  • 22. わんくま同盟 東京勉強会 #96 セッションをクラックしてみる • 割り符とはいっても文字列です • 例) セッションIDは2桁の数字です • 例) セッションIDは128桁の16進数です • どっちがクラックしやすいでしょう? • 「絶対にクラックできない」のはどちらでしょ う?
  • 23. わんくま同盟 東京勉強会 #96 • ログインセッションは「不可侵」ではありません • 後は「どれくらいの確率で破られるか」です – まぁセキュリティはどこまでも「確率」ですが • HTTPは機構的に「認証などのstatueを持つ には不向き」なのを無理矢理に実装している ので、それなりに気をつけないと「簡単になり すます」事ができます
  • 24. わんくま同盟 東京勉強会 #96 hiddenの値を書き換える系のクラック • hiddenは「HTMLの中にあって、見えない情 報」です。 • 入力フォームなんかで割と見かけます – 入力Pagaをちょうだい • あいよ – (情報入力して)確認Pageをちょうだい • あいよ – 完了Pageをちょうだい • …入力データは?
  • 25. わんくま同盟 東京勉強会 #96 • 正しい入力フォーム – 入力Pagaをちょうだい • あいよ – (情報入力して)確認Pageをちょうだい • あいよ:hiddenに入力されたデータ – 完了Pageをちょうだい • (hiddenに情報入ってるから処理完了)あいよ
  • 26. わんくま同盟 東京勉強会 #96 • 正しい入力フォーム(くわしく) – 入力Pagaをちょうだい • あいよ – (情報入力して)確認Pageをちょうだい • (データチェックして問題なければ)あいよ hiddenに入力されたデータ – 完了Pageをちょうだい • (hiddenに情報入ってるから処理完了)あいよ
  • 27. わんくま同盟 東京勉強会 #96 • 暗転した入力フォーム – 入力Pagaをちょうだい • あいよ – (情報入力して)確認Pageをちょうだい • (データチェックして問題なければ)あいよ hiddenに入力されたデータ – (hiddenの中身を書き換える) – 完了Pageをちょうだい • (hiddenに情報入ってるから処理完了)あいよ • ………あれ?
  • 28. わんくま同盟 東京勉強会 #96 • hiddenも含めて、全ての外部入力は「不適切 な内容」の可能性があります – 前述のCookieも「ユーザのHDDにデータがある」 んで書き換えが可能です • 「常にstateless」で、1往復使い切りの通信で あることを、しっかりと肝に銘じておきましょう • いわゆる「普通の」プログラムと同じように考 えると、思いがけない所からクラックされます
  • 29. わんくま同盟 東京勉強会 #96 DNSポイゾニング基礎 • 前提として「TPC」と「UDP」を抑えておきます – TCPは「信頼があるけどちょっと重い」 – UDPは「軽い、早い」を重視 • DNSは「ドメイン名をIPアドレスに変換する」 サービスで、インターネットの裏側としては「最 重要クラス」のブツになります
  • 30. わんくま同盟 東京勉強会 #96 • DNS通信の基本 – このドメインのIP ちょうだい – (IPを)あいよ • もうちょい丁寧に – このドメインのIP ちょうだい(識別番号123) – 識別番号123、このIPで あいよ • 識別番号は「1台のサーバが沢山質問をする」から、ど の質問かを識別する用途
  • 31. わんくま同盟 東京勉強会 #96 • DNSその2:多段構造です • 「www.wankuma.com」を知りたい – 「com」を問い合わせ – 「wankuma.com」を問い合わせ – 「 www.wankuma.com」を問い合わせ • 毎回だと面倒だし通信コストもかかるので、実 際には適宜キャッシュします
  • 32. わんくま同盟 東京勉強会 #96 • 「www.wankuma.com」を知りたい – 「com」を問い合わせ • 「com」を管理してるDNSサーバをキャッシュ – 「wankuma.com」を問い合わせ • 「wankuma.com」管理DNSサーバをキャッシュ – 「www.wankuma.com」を問い合わせ • 「www.wankuma.com」のIPをキャッシュ • TTL、という値で「データの寿命」を管理
  • 33. わんくま同盟 東京勉強会 #96 ちょっと暗転 • 一部切り出し – 「wankuma.com」のIPをちょうだい:識別123 – 識別123:このIPだよ あいよ • 「wankuma.com」管理DNSサーバをキャッシュ • 暗転 – 「wankuma.com」のIPをちょうだい:識別123 – 識別123:このIPだよ あいよ(嘘サーバ) • 「wankuma.com」管理DNSサーバをキャッシュ
  • 34. わんくま同盟 東京勉強会 #96 • DNSの「ちょうだい」「あいよ」はUDP • そのため、攻撃側は – キャッシュさせたい鯖Aに「問い合わせ」を投げる – 鯖Aは「問い合わせ」をどこかに問い合わせる – 攻撃側は「偽装した"あいよ"」を鯖Aに投げる – 鯖Aは「偽装した"あいよ"」を受け取って、嘘情報 をキャッシュしてしまう • 識別子、16ビットなんで65536通りなの orz
  • 35. わんくま同盟 東京勉強会 #96 CSRF • くろすさいとりくえすとふぉーじぇり、といいます • 幾分面倒な仕組みなのですが、割としゃれに なんない問題を抱えるので、ちょっと前、割と スポットライトがあたってました – 古くは「ぼくはまちちゃん」というアタックで – 少し前だと「脅迫的な書き込みでの誤認逮捕」が
  • 37. わんくま同盟 東京勉強会 #96 • 1)攻撃者のサーバのPageにアクセス • 2) レスポンス – 中には、iframeなどで(3)のURLが書いてある • 3) iframeなどに従って、掲示板にアクセス – GETパラメタなどに「脅迫文」が書いてある • 4) 掲示板は「書き込みをした」旨をレスポンス – iframenのサイズが0だったりすると見れない orz
  • 38. わんくま同盟 東京勉強会 #96 CSRFの怖いところ • 「お前のIPからの書き込みだからお前が書い たんだ!」って言われちゃう orz • iframe経由とはいえ「正当なルートからのアク セス」なのでCookie(割り符)が届いちゃうので 「本人として」色々、宜しくない行動を強要させ られちゃう orz
  • 39. わんくま同盟 東京勉強会 #96 おまけ • あなたの知らない世界 – または「事実は小説よりも奇なり」 • とあるゲーム作成での、実話です • いわゆる「アプリ」なので – ガジェットが「ちょうだい」して – サーバが「あいよ」します • ガジェットを「front」っていう事があります
  • 40. わんくま同盟 東京勉強会 #96 • がちゃを引く – front:「がちゃを引く」処理を内部で行う – front: 鯖に対して「このカードを引いた」で通信 • 通信情報は「ユーザのID」と「カードのID」 – 鯖:指定されたユーザに対して、指定されたカード の付与を行う • …ユーザが「悪意をもって」パラメタを偽装した ら? – 「お高いカードID」とか指定したくありません?(笑
  • 41. わんくま同盟 東京勉強会 #96 まとめ • httpは「シンプルに作る」ことで、スケーラビリ ティなどに大変優れたプロトコルです • ただ「鬼ほどにシンプル」なので、本来できるこ とは少ないです • そこに「山盛りの下心」を現在盛り込んでいる ので(認証とか)。設計者が気をつけないと、危 険な香りが「むせっかえる」くらいに漂います • 「ちょうだい」「あいよ」を理解して、付け入る隙 間にはちゃんとパテを埋めましょう!!!