【インターンレポート】LINEの各サービスに対するリスクアセスメント業務について

 2019年度のLINE夏インターンのセキュリティコースに参加した、明石工業高等専門学校 電気情報工学科3年の井上 (@sei0o) です。この記事ではインターンとして実際に何をしたかを紹介します。

業務内容

 セキュリティセンターのAST(Application Security Team)に配属され、LINEの各プロダクトに対するリスクアセスメント業務を行いました。リスクアセスメント業務ではプロダクトに対して脆弱性があるかどうか診断します。ASTではインターン向けに課題が用意されていたわけではなく、ほぼ実際の業務を行う形でした。他のインターンから話を聞く限り、セキュリティコース以外でもそのような形で業務を行っているとのことでした。

 LINEのプロダクトや、それらに利用されているフレームワーク・プラットフォームは多岐に渡ります。私はWebサービスとして動作しているプロダクトのサーバサイド (Springなど)およびクライアントサイド (iOS/Androidアプリ, Webサイト) を中心に診断していました。プログラミング言語でいえばJava, Swift, Kotlin, JavaScriptがほとんどです。LINE Payに代表される金融系のプロダクトや大規模なプロダクトを持つというのはLINEの魅力であり、また難しさでもあると思います。広告出稿者や社員が利用する内製のCMS、スマートスピーカーClovaのハードウェアなどもリスクアセスメント業務の範囲に含まれます。

 私は主にソースコードが提供された状態、すなわちホワイトボックスでの診断を行いました。対して開発部署が社外にある場合などはソースコードは提供されず、ブラックボックスでの診断を行わなければなりません。いずれの場合でも、診断はプロダクトの挙動を確認するところから始まります。iOSアプリであれば実際にアプリを使用してログインしたり画像を送信してみたりします。LINE家計簿など普段から個人的に使用して慣れているサービスであっても、網羅的に機能を理解するのには苦労します。

リスクアセスメント業務では、LINE家計簿やLINE Pay関連, LINEノベル等について診断を行いました。

 その後、クライアントとサーバの通信には多くの場合HTTPが利用されるので、Burp Suiteなどのプロキシを用いて通信に入り込みパケットを取得することでユーザの操作に対応してアプリケーション内部で何が起こるか理解を深めます。それと同時にソースコードや開発側で作成されたドキュメントを参照しながら脆弱な部分を探します。

 サーバサイドでのJavaによる開発経験もなければ、マイクロサービスについての理解もありませんでしたが、Spring自体はMVCアーキテクチャを採用しているのでそのことを念頭においてソースコードを読み解きました。ViewではVue/Nuxtなど新しいフレームワークを取り入れSPAになっている部分もあれば、JSPを利用している部分もあります。LIFF(LINE Front-end Framework)やCWA(Channel Web Application)を利用したLINE固有の設計への理解が必要で、慣れるのにやや時間がかかりました。何か怪しい箇所が見つかった場合にはベータ版やローカル環境で攻撃を試します。診断は地道な作業で、1日中探しても脆弱な部分が見つからない日も多くありました。

 運良く(いや本当は「運悪く」と書くべきですが)脆弱性やセキュリティ上の懸念点が見つかれば社内のバグ追跡システムにてチケットを発行し開発者に報告、修正を依頼します。その後もやりとりを通じて脆弱性が修正されたことを確認するなどの作業があります。他の人が発行したチケットは、報告の書き方の参考にするだけでなく脆弱性を探す際のヒントとして活用しました。

 リスクアセスメント業務以外にも、週に何回かミーティングに参加する機会がありました。LINEではすでにリリースされているプロダクトについて、社外のハッカーによる脆弱性報告を受け付ける「LINE Security Bug Bounty Program」という仕組みが運用されています。報告された脆弱性を評価するミーティングでは、報告が処理され報酬が決定される過程をサービス運営側の視点で知ることができました。また、ASTのメンバーがそれぞれ取り組んでいることや見つけた脆弱性を共有するSecurity Tech Meetingが毎週開かれ、いろいろな知識を得ました。この他に、リスクアセスメントを含めたASTの様々な業務の進捗報告のためのミーティングにも参加しました。

おわりに

 実運用されているプロダクトの膨大なソースコードに隠れた脆弱性を見つけるのは容易ではなかったとはいえ、メンターさんや他の社員さんにアドバイスをもらいつつ自分なりに業務を進めることができました。生活圏が関西である私にとって、東京で、なおかつ周囲のレベルの高い環境での就業インターンは貴重な経験になりました。CTF(Capture The Flag)の問題を解いたり、ソースコードを読んで理解したりするのが好きな人は楽しめると思いますので、来年の夏インターンに応募して、Webテストにも挑戦してみてください。

Related Post