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
3
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
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.4k
コンテナ運用におけるネットワーク・コンテナコストの削減方法/How to Reduce Network and Container Costs in Container Operations
masakiokuda
1
150
Rust で関数型ドメインモデリング
takonda
0
140
Claude Code本は、どのように執筆チームで書かれたか
oikon48
1
380
Optunaの最新リリースv5.0について
pfn
PRO
0
120
[JAWS-UG彩の国埼玉#12]そろそろ準備する?re:Invent2026をやさしく解説 / reinvent2026-sainokuni
sh_fk2
1
340
その Valkey 使いこなしていますか?
onk
PRO
5
1.5k
Post AI時代のリファクタリング実践記 / Refactoring in the post AI era
kaminashi
1
230
USB PDを使ってスマホを労わりたい
raspython3
0
180
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
150
M5Stackで作る BLEマウス GPSログの世界
tomokusaba
0
420
Tofu-Controller lightning talk @ Containerday 2026
gionn
0
110
Featured
See All Featured
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
410
Building an army of robots
kneath
307
47k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
630
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Leo the Paperboy
mayatellez
10
2.4k
Paper Plane
katiecoart
PRO
5
54k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
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(検索画面)