Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
APKからAPIキーが読めてしまう- Lambdaを挟んだら安全になるのか
Search
aoya36
October 20, 2026
Technology
31
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
APKからAPIキーが読めてしまう- Lambdaを挟んだら安全になるのか
aoya36
October 20, 2026
Other Decks in Technology
See All in Technology
HQ駆動開発で最高のAI-Contextを作ろう
sansantech
PRO
1
120
【dbts2026】AIエージェントの 判断と探索を変える、 データベース エンジニアリング― 既存DBの処理と依存関係から作る、オペレーショナルオントロジー ―
shisyu_gaku
0
260
cdkd (CDK Direct)
gotok365
4
280
Microsoft Entra Kerberos で実現するクラウド デバイス管理
tamaiyutaro
2
660
内製アプリとClaudeスキルのセキュリティチェック、 Backlogの課題で回しています。
ayaka_egaaa
0
160
Ebitengine製iOSアプリ公開ボタンを押す会
eiei114
0
110
An Introduction to Context Ontology Accelerator (teaching AI agents what your data means)
inariku
PRO
1
180
公共分野での生成AI活用
toru_kubota
1
310
AI時代に求められる優秀なTechLeadの振る舞い
pospome
11
15k
Kiro IDE 入門 (画面の各部から、頼み方、任せ方、戻し方まで) | 目指せ Kiro マスター 02
inariku
PRO
4
170
SSFの現在地 ― CAEP/RISCからAI Identityへ
oidfj
0
310
プロダクションコードにおける encoding/json から encoding/json/v2 へのスムーズな移行
sansantech
PRO
1
220
Featured
See All Featured
A designer walks into a library…
pauljervisheath
211
25k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3.1k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
890
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
Claude Code のすすめ
schroneko
67
230k
Balancing Empowerment & Direction
lara
6
1.4k
Music & Morning Musume
bryan
48
7.5k
The SEO identity crisis: Don't let AI make you average
varn
0
630
Raft: Consensus for Rubyists
vanstee
143
7.9k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
450
Transcript
APKからAPIキーが読めてしまう ― Lambdaを挟んだら安全になるのか 日本システム技術株式会社 野口 碧矢 2026/10/19 #ToBeAWSJrChampions2027
自己紹介 ▪ 名前:野口 碧矢 ▪ 社会人歴:1年目 ▪ 業務内容:物流システムのWeb・モバイルアプリ開発 ▪ AWS学習歴:2ヵ月
▪ GitHub:https://github.com/A0yyy36 ▪ Qiita:https://qiita.com/A0yyy36 ▪ ポートフォリオ:https://a0yyy36.github.io/my-garden/
前提 ▪ 自主学習で本の登録・削除アプリを作成(Kotlin・XML) 今回の題材:このアプリのGoogle Books APIキーをどう守るか APIキー付きで直接通信
APKを開いたら、キーが見えた ▪ 自作アプリのAPKを逆コンパイラ(jadx)で開くと、APIキーが平文で読めた ※今回はAPIキーを”SampleAPIKey”というダミー値に変えてビルド
Lambdaを挟んでAPIキーを隠す APIキーはLambdaの環境変数へ移動 → アプリはGoogle Books APIを直接呼ばない
新たな問題:API Gatewayキーがアプリに残る APIキーは隠せたが、API GatewayキーをAndroidアプリが保持している
公開されているAPI Gatewayに対して上限を決める ▪ ▪ 使用量プラン (API Gateway)で、APIキーごとに使える量を制限 5 10 1,000
リクエスト / 秒 (レート) バースト 回 / 日 (クォータ) 日次クォータを小さくして確認 → 超過すると429 Limit Exceeded が返った (詳細はAppendix)
制限は効いたか ▪ 15秒間、8並列でGET /booksを連打(実測の平均値【3回】) 範囲:83~85 84 200(成功) ⇒理論値(85件)とほぼ同等 ※実測の結果(1回分) 1,311
429(制限) 1,395 合計リクエスト
【今後の展望】入口を守る: WAF + 認証 JWT = ログイン済みであることを証明する 期限付きの署名付きトークン
まとめ ▪ Lambdaを挟んだだけでは安全にはならない ▪ APIキーは隠せるが、入口(API Gateway)は公開のまま ▪ 使用量プランで被害を限定する ※同じキーを使う正規ユーザーも、枠を使い切ると使えなくなる 今後の展望
→ WAFで怪しいアクセスをブロック → Cognito等で誰からのリクエストかの確認
Appendix
API Gatewayキーは隠せない ▪ APIキーを隠すことは出来たが、API Gatewayキーが出てしまっている ※今回はAPI Gatewayキーを”SampleAPIGatewayKey”というダミー値に変えてビルド
日次クォータを超過した際の実行結果例 ▪ 実行環境: 50回/日 (クォータ) ▪ 超過後5リクエストで実行中止 50 5 55
200(成功) 429(Limit Exceeded) 総数 ※実測の一例
何故理論値と一致しないのか ▪ AWS自身が「厳密な上限」としていない AWSのドキュメントでは、スロットリングは「ベストエフォート」で適用 されると説明されている。API Gatewayは複数のノードで分散処理されて いるため、トークンの管理が1つのバケットで完結せず、数件のズレが出る。 ▪ スロットリングはベストエフォートで適用される(AWSドキュメント)。 そのため、実測は理論値85件に対して83〜85件と、数件のずれが出た。分
散処理の影響が考えられる。 https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api -gateway-request-throttling.html
理論値の算出方法 5 10 15 リクエスト / 秒 (レート) バースト 秒間
5(リクエスト/秒) × 15(秒) + 10(バースト) = 85件(理論値)
本システムの問題点 ▪ 共有枠なので、一人が使い切ると全員に影響が出る → 使用量プランの枠は全員で共有しているため、誰かが使い切ると正規の ユーザーも429となる。 → 攻撃者と正規ユーザーが同じキーを使うため、区別できない。そのため WAFと認証が必要
ログイン部分の選択肢 1. ログイン画面を追加:Cognitoでサインイン機能を作る 2. Cognitoの未認証IDを利用する:ユーザーがログインしていなくても、設 定に応じて一時的なAWS認証情報を取得(個人の特定ではなく識別) 3. Play Integrity APIを利用する:正規のアプリ・端末からのリクエストかを
確認 ※ ログインなしで確認できるのは「誰か」ではなく「正規のアプリか」
REST APIを選んだ理由 ▪ 本システムはREST APIを採用している ▪ REST APIは使用量プランを適用できる ▪ REST
APIはWAFを直接アタッチできるため、今後の入口防御に向いている ▪ HTTP APIの場合は、CloudFrontを経由してWAFを適用する必要がある
書籍管理アプリのUI(管理画面)
書籍管理アプリのUI(検索画面)