AIアプリのAPIキーが不正利用された経験から学んだセキュリティ対策とバックアップ

スポンサーリンク

ある朝、いつものように自分で開発したAIアプリを使って文章を生成しようとしたところ、文章が生成されませんでした。

「何か一時的な通信エラーかな?」

最初はその程度に考えていました。

ところが調べていくと、単純な通信障害ではありませんでした。

APIの利用状況を見ると、普段とは明らかに違う動きが確認できたのです。

今回は、AIアプリを開発・運用する中で実際に経験したトラブルと、そこからセキュリティやバックアップについて改めて考えたことを書いてみたいと思います。

いつもの文章生成が突然できなくなった

私が開発しているLinguaWriterは、テーマや要点などを入力すると、AIが文章を生成してくれるアプリです。

iOS版、Android版、Web版を提供しています。

ところが、その日は文章生成を実行しても正常に結果が返ってきません。

最初に疑ったのは、APIの利用上限や設定の問題でした。

そこで管理画面を確認していくと、気になることがありました。

前日のAPI利用量が、通常とは明らかに異なる増え方をしていたのです。

自分が使った量とは考えにくい数字でした。

ここでようやく、

「認証情報が第三者に利用された可能性があるのではないか」

と考えるようになりました。

まず行ったのは、認証情報を無効にすること

原因を完全に特定するより先に、まず現在使っている認証情報を無効にしました。

もし第三者に利用されているのであれば、調査している間にも利用され続ける可能性があるからです。

その後、新しい認証情報を発行しました。

これで一件落着――。

とはなりませんでした。

同じ仕組みのまま新しい認証情報へ交換しただけなら、再び同じことが起きる可能性があります。

そこで考えたのが、

「そもそも、なぜアプリ側に重要な認証情報を持たせる必要があるのだろう?」

ということでした。

「見えない」と「取り出せない」は違う

スマートフォンアプリは、利用者にソースコードを公開しているわけではありません。

そのため、アプリ内部に書かれている情報は簡単には見えないように感じます。

私自身も、開発環境の中で適切に管理していれば、ある程度安全だと考えていました。

しかし、ここには大きな落とし穴があります。

アプリは最終的に利用者の端末へ配布されるものです。

ソースコードがそのまま見えるわけではなくても、専門的な知識やツールを使ってアプリを解析することは可能です。

つまり、

「普通には見えない」ことと、「絶対に取り出せない」ことは同じではありません。

これは今回、改めて強く認識したことの一つでした。

重要な情報をアプリに持たせない設計へ

そこで、アプリの通信方法そのものを見直すことにしました。

これまではスマートフォンアプリから外部のAIサービスを直接利用する構成でしたが、これを変更しました。

現在は、

アプリから自分たちが管理するサーバーへ要求を送り、サーバー側がAIサービスと通信する

という構成にしています。

重要な認証情報はサーバー側だけで管理します。

スマートフォンアプリには認証情報そのものを持たせません。

アプリは「こんな文章を作ってほしい」という情報をサーバーへ送り、生成された結果だけを受け取ります。

この構成であれば、アプリそのものを解析されても、
そこに外部AIサービスの認証情報を埋め込んでいないため、
アプリから直接その認証情報を取り出されるリスクを大きく減らすことができます。

サーバーに移せば、それですべて安全なのか

もちろん、そう単純な話でもありません。

重要な情報をアプリからサーバーへ移したことで、今度はサーバー側の安全性がより重要になります。

また、アプリとサーバーとの通信部分についても、不正な利用を想定した設計が必要になります。

そのため今回、認証情報の保管場所を変更するだけではなく、利用方法やアクセス制御、異常な利用を発見するための監視についても見直しました。

セキュリティには、

  • 重要な情報を盗まれにくくする
  • 不正利用されにくくする
  • 万が一不正利用されても被害を大きくしない
  • 異常が起きたことに早く気づく

という複数の考え方が必要なのだと思います。

一つの対策だけで「これでもう絶対安全」と考えないことも大切です。

そして、もう一つ気づいたこと

サーバー側の重要性が高くなったことで、ふと別の疑問が浮かびました。

「ところで、このサーバーのバックアップは大丈夫だろうか?」

確認してみると、メインのWebサイトについては定期的にバックアップしていました。

ところがLinguaWriterを運用している環境については、独立したバックアップ体制が十分ではありませんでした。

これはAPIのトラブルとは直接関係ありません。

しかし、今回セキュリティを見直したからこそ気づいた問題でした。

バックアップも改めて見直した

そこでLinguaWriter側についても、定期的にバックアップを取得し、サーバーとは別の場所へ保存する仕組みを整えました。

さらに、実際にバックアップを実行し、外部の保存先へ正常に保存されることまで確認しました。

バックアップは「設定してある」だけでは安心できません。

実際にバックアップされていること、そして必要なときに復旧に使える状態になっていることが重要です。

今回の出来事がなければ、このバックアップ体制についても「そのうち確認しよう」と先送りしていたかもしれません。

開発と運用は違う

アプリを開発していると、どうしても機能を作ることに意識が向きます。

新しい機能を追加する。

画面を使いやすくする。

不具合を修正する。

文章生成の品質を高める。

こうした作業は成果が目に見えるので、開発していても楽しいものです。

一方で、

  • 認証情報の管理
  • アクセス制御
  • 利用状況の監視
  • バックアップ
  • 障害発生時の復旧方法

といった部分は、正常に動いている間はなかなか意識しません。

しかしサービスを公開するということは、プログラムを完成させるだけではありません。

「作る」ことと「安全に運用する」ことは、別の仕事なのだと思います。

日本語の小さなアプリだから狙われない、とは限らない

LinguaWriterは日本語を中心としたアプリです。

利用者もまだ決して多くありません。

そう考えると、

「こんな小さな日本語アプリをわざわざ調べる人はいないだろう」

と思いたくなります。

しかし現在は、翻訳ツールもAIもあります。

言語の壁は以前よりはるかに低くなりました。

さらに、インターネット上のサービスを機械的に探したり調べたりすることもできます。

「自分のサービスは小さいから大丈夫」という考え方自体を見直した方がよい。

これも今回の経験から得た教訓です。

被害を防ぐだけでなく、異常に気づくことも大切

今回、比較的早く問題に気づくきっかけになったのは、
普段とは明らかに違うAPIの利用量でした。

短時間に利用量が大きく増えていたため、
「これは自分の利用ではない」と気づくことができました。

さらに確認すると、AIサービスの提供元からも、
不審な利用を検知したことを知らせるメールが届いていました。

ここで、少し怖いことにも気づきました。


もし第三者が、一度に大量に使うのではなく、
毎日少しずつ利用していたらどうだっただろう?

おそらく今回ほど早くは気づかなかったと思います。

これは、クレジットカードの不正利用にも少し似ています。

普段とはかけ離れた高額な利用が突然発生すれば、
利用者自身も気づきやすく、
カード会社の監視によって異常が検知される可能性も高くなります。

一方、普段の買い物に紛れるような少額の利用が続いた場合、
明細を確認しなければ気づくまでに時間がかかるかもしれません。

APIの利用も同じだと思います。


「認証情報を盗まれないようにすること」と、
「もし不正利用されたときに早く気づくこと」は、
別々に考える必要があります。

どれだけ対策をしても、
すべての問題を事前に防げるとは限りません。

だからこそ、
利用量や料金の変化を確認し、
普段とは違う動きを早く発見できるようにしておくことも、
セキュリティの重要な一部なのだと実感しました。

これはAIサービスに限らず、
クラウドサービスやWebシステム全般に言えることではないでしょうか。

禍を転じて福と為す

突然文章が生成できなくなったときは、もちろん困りました。

原因を調べ、対応し、iOS版とAndroid版の両方を修正することにもなりました。

できれば経験したくないトラブルです。

しかし振り返ってみると、この出来事があったからこそ、

  • APIの利用方法を見直した
  • 重要な認証情報の管理方法を変更した
  • アクセス制御について考え直した
  • 利用状況を監視する重要性に気づいた
  • バックアップ体制まで見直した

という改善につながりました。

もし何も起きていなければ、以前の仕組みをそのまま使い続けていた可能性があります。

「禍を転じて福と為す」

まさに、そんな出来事だったと思います。

システムは「正常に動いているから完成」ではありません。

使われ続ける中で問題を発見し、そのたびに少しずつ強くしていくものなのかもしれません。

今回の経験を、これからのLinguaWriterだけでなく、今後開発するシステムにも生かしていきたいと思います。

現在はiOS・Android・Web版とも正常に利用できます

今回の対応では、LinguaWriterの通信方法やセキュリティを見直し、
iOS版、Android版ともに修正版を公開しました。

現在は両アプリとも最新版が各ストアからダウンロードできる状態になっています。

すでにLinguaWriterをご利用いただいている方は、
ぜひ最新版へのアップデートをお願いします。

また、LinguaWriter Web版についても正常に利用できます。

Web版はアプリのインストールが不要で、
ブラウザからすぐにLinguaWriterの文章生成を試すことができます。

ぜひLinguaWriterを体感してください

LinguaWriterは、単にAIに文章を書かせるためのアプリではありません。

私が目指しているのは、
AIを使うために難しいプロンプトを考えなくても、
誰でも自然に文章作成へAIを活用できる環境
です。

書きたい文章に合った「ライティングプロフィール」を選び、
テーマや要点、結論などを入力する。

スマートフォンなら音声で伝えることもできます。

そしてLinguaWriterが、
ブログ、SNS、メール、ビジネス文書など、
目的に合った文章へ整えてくれます。

「AIは便利そうだけど、どう指示したらいいか分からない」

「プロンプトを考えるのが面倒」

「頭の中にあることを、うまく文章にできない」

そんな方にこそ、一度LinguaWriterを使っていただきたいと思っています。

今回の出来事をきっかけに、
LinguaWriterは以前より安全で、運用しやすい仕組みへ改善することができました。


ぜひ最新版のLinguaWriter、そしてWeb版を実際に使って、
「ライターを選んで文章を作る」という体験をしてみてください。

LinguaWriterを使ってみる

iOS版(iPhone・iPad)

App StoreでLinguaWriterを見る

Android版

Google PlayでLinguaWriterを見る

LinguaWriter Web版

ブラウザからLinguaWriterを使う

トラブルも、次の改善につながる

今回のような出来事は、もちろん起きないに越したことはありません。

しかし、その問題をきっかけに仕組みを見直し、
以前より良いものへ変えていくことはできます。

APIのセキュリティを見直したことで、
バックアップ体制についても改めて考えることができました。

そしてLinguaWriterそのものも、
より安心して提供できる環境へ一歩進むことができました。

禍を転じて福と為す。

今回の経験をこれからのLinguaWriter、
そして今後のシステム開発にも生かしていきたいと思います。

コメント