SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

開発生産性向上に寄与するツール大研究(AD)

JavaScriptのコードを難読化! Webアプリのリバースエンジニアリングを防ぐ「PreEmptive Protection for JavaScript」

  • このエントリーをはてなブックマークに追加

 GmailやGoogle マップ、Facebook、Twitterなど、日ごろ私たちが使っているサービスの多くがWebアプリケーションである。これらはインストールすることなく、インターネットに接続するだけでWebブラウザから利用可能だ。そのため普及が進んでいるものの、ハッカーから狙われやすい側面もある。そこで今、注目を集めているのが、JavaScriptのコード難読化ツールだ。導入にはどのようなメリットがあるのか。JavaScriptの難読化ツール「PreEmptive Protection for JavaScript」が提供する機能、導入するメリットなどについて、同製品のマーケティングを担当しているエージーテックの青山和宏氏と、サポートを担当している伊藤友恒氏に話を聞いた。

  • このエントリーをはてなブックマークに追加

Webアプリの普及で活用の幅が広がるJavaScript

 スマートフォン(スマホ)の普及により、Web開発の主戦場はPCから移り変わりつつある。すでにインターネットのトラフィックの半分以上はモバイル端末となっており、Webサイトもモバイル中心に変わりつつある。

 スマホ向けアプリの場合、ネイティブアプリが実行速度も速く、デバイス特有の機能が生かせるため最善だが、「それぞれの環境に応じて開発が必要になるためコストがかかること、さらに技術者不足などが課題になりつつあります」と青山氏は指摘する。そこで活用が進んでいるのが、Webアプリケーション(Webアプリ)、ネイティブアプリとWebアプリのいいとこ取りを実現した、ハイブリッドアプリである。

 それを表すように、GmailやGoogle マップ、FacebookやTwitterなどのSNS、食べログ、ぐるなび、クックパッドなど、私たちが使うサービスの多くがWebアプリやハイブリッドアプリでできている。この動きはコンシューマー向けだけではない。クラウドの普及によりエンタープライズにおいても、基幹アプリケーションのWebアプリ利用が増えている。

 Webアプリがこれほどまでに普及するのには理由がある。それは専用のアプリケーションのインストールが不要で、Webブラウザさえあれば即利用可能になること、マルチデバイス対応が比較的容易なこと、クライアントが増えてもサーバーの負荷が増えないこと、サーバーサイドだけの修正で済むなど、メンテナンスが容易なことなどが挙げられる。その一方でデメリットもある。

 「ネットワーク環境が必要なことはもちろんですが、セキュリティホールの不安もあります」(青山氏)

株式会社エージーテック 営業本部 営業2部 マーケティング Product Manager 青山和宏氏
株式会社エージーテック 営業本部 営業2部 マーケティング Product Manager 青山和宏氏

 Webアプリを開発する言語はPHPやJavaなど複数あるが、今、最も開発現場で活用されているのが、JavaScriptである。なぜ、JavaScriptがこれほどまでにWebアプリ開発の現場で幅広く使われているのか。

 「サーバーサイドをJavaScript環境で開発できるNode.jsが登場したことです。これにより、フロントエンドとバックエンドの両方をJavaScriptで開発できるようになり、JavaScriptの活用が増えました」(青山氏)

 その後、jQueryやReact、AngularといったJavaScriptフレームワークやライブラリが登場し、現在ではネイティブアプリに劣らないリッチなWebアプリの開発が可能になっている。

Webアプリが持つセキュリティへの不安を難読化ツールで払拭

 だが、Webアプリには先述したようにセキュリティ面の不安がある。

 「JavaScriptのソースコードは、Webブラウザから誰でも簡単に見られます。ハッカーはそれを解析することで、不正や攻撃を容易に仕掛けることが可能です。ソースの流用やロジックの解析が可能なため、不正ログインやゲームでチートをすること、また改ざんすることでマルウェアやフィッシングを混入させることもできます。米国では情報漏えい事故など、さまざまな事件が起こっています」(青山氏)

 アプリケーションの動作はそのままに、Webアプリの持つこれらのセキュリティに対する不安を払拭するために活用したいのが、コード難読化ツール「PreEmptive Protection for JavaScript(PPJS)」である。

 PreEmptive社は、.NET環境やJava/Android環境のコード難読化ツールを過去20年以上にわたり提供してきた。JavaScript向けの難読化機能を開発するきっかけとなったのは、「米国のある有料の動画配信サービス会社から要望されたこと」と青山氏は明かす。そのため「PreEmptive Protection」にはJavaScriptの難読化機能はもちろん、これまで提供されてきた.NET(C#、VB.NET、Xamarin)、Java/Androidの難読化機能も含まれている。

 日本では難読化ツールに馴染みがない人も多いかもしれないが、米国では、中間言語を使用した.NET環境やJavaなどの開発環境において、難読化ツールが当たり前のように使われてきたという。しかし、日本においても個人情報漏えい対策のひとつとして、金融業界などを中心に、難読化ツールへの関心が高まっているのだ。

「PreEmptive Protection for JavaScript」が提供する機能

 PPJSが果たす役割は大きく5つ。第一はコードの圧縮。第二がリバースエンジニアリングを困難にすること。第三がデバッグの妨害。第四が攻撃者の脆弱性解析の阻止。第五がコード改ざんや流出の阻止である。

 これらを実現するため、次の機能が提供されている。

【1】名前の変更

  • ローカル変数の名前を複雑な記号に置き換えるなど、わかりづらく変更する。
  • FalseとTrueリテラルを別の式に変換。
  • 整数リテラル(定数)をわかりづらい式に変換。
  • すべての整数リテラルを特定の基数(2進法、10進法、16進法、または8進法)に変換。
  • 直接的なプロパティアクセスを間接的なプロパティアクセスに変換。

【2】文字列の暗号化

  • 文字列を変数に置き換えるなど暗号化する。

【3】制御フローの難読化

  • 不要コードの挿入やロジックの複雑化。

【4】ドメインのバインド

  • JavaScriptコードを特定のドメインにバインド。これにより、コードが特定のドメインと一致しない場合、動作を中断させる。
PreEmptive Protection for JavaScriptを使用したソースコード難読化の例
PreEmptive Protection for JavaScriptを使用したソースコード難読化の例

 難読化ツールをこれまで使ってきてこなかったエンジニアにとって、心配なのは使い勝手だ。だが、それも心配ない。

 「Node.jsが動作するすべてのプラットフォームをサポートしており、現在使っている開発環境に組み込むだけですぐに使えます。操作もコンソールからコマンドを入力するだけなので、簡単です」(伊藤氏)

株式会社エージーテック 営業本部 営業2部 サポート&サービス 伊藤友恒氏
株式会社エージーテック 営業本部 営業2部 サポート&サービス 伊藤友恒氏

 Webブラウザ用JavaScriptコードやサーバーサイド用JavaScriptコードはもちろん、ReactやCordovaといったフレームワークを利用したコードや、自社で構築したJavaScriptを利用したフレームワークなどを難読化することができる。さらに今後はReact Nativeなどのハイブリッドアプリもサポートする予定だという。

フリーの難読化ツールとの違い

 とはいえ、JavaScriptの難読化ツールはPPJSだけではない。「JavaScript Obfuscator Tool」や「jjencode」「/packer/」などの無料ツールも存在する。それら無料ツールではなく有料ツールであるPPJSを使うメリットはどこにあるのか。

 「まずは品質の高さです。難読化に対して、PreEmptive社には20年以上の歴史があるので、手法にも性能差が出てくる。もちろん、JavaScriptのバージョンアップにも即追随します。そして、難読化時に技術サポートの提供があることです。PPJSはJavaScriptのバージョンの違いもしっかりサポートします。JavaScriptの難読化はコマンドラインを使用するためGUIの日本語化は予定していませんが、マニュアルはすべて日本語化して提供します」(青山氏)

 また実際に技術サポートを担当する伊藤氏も次のように話す。

 「難読化ツールは簡単に使えると言いましたが、まれにビルドエラーが発生することがあります。そういった場合でも、私たちサポートチームにお問い合わせいただければ、状況を解析して解決策を提案します。手厚いサポートを提供する面でも安心して活用してもらえると思います」(伊藤氏)

 それだけではない。.NETやJava/Android用の難読化ツールではすでに6000社を超える企業に採用され、実績がある。.NETの機能限定版はVisual Studio 2003から標準搭載されるなど、業界からの信頼性の高さもPPJSのメリットと言えるだろう。

 「金融系などのクラウドを使ったサービスを展開している企業やeコマース企業などにぜひ活用していただきたいですね」(青山氏)

JavaScriptハイブリッドモバイルアプリの保護も予定

 PPJSは10月にリリース予定だが、すでにさらなる機能拡張も予定されている。

 「Cordova、React Native、IonicなどのJavaScriptフレームワークに順次対応していき、今後はクロスプラットフォームやAndroidといったネイティブ環境との統合による、さらに利用しやすいツール群なども追加していく予定です」(青山氏)

 PPJSはアプリケーション保護の統合製品「PreEmptive Protection」(※)に含まれる製品であるため、年間98万円(税抜)とそれなりにコストはかかる。だが、Webアプリのセキュリティ対策を考えるのであれば難読化ツールの活用は必須とも言える。その効果を検証してみたい人は、エージーテックのPreEmptive製品サポートページから評価版を申し込み、試してみてほしい。その効果を実感できるはずだ。

※「PreEmptive Protection」に含まれている製品
  • Dotfuscator for .NET/Xamarin(.NET/Xamarinアプリケーションの難読化&保護ツール)
  • DashO for Java/Android(Java/Androidアプリケーションの難読化&保護ツール)
  • PreEmptive Protection for JavaScript(JavaScriptの難読化ツール)

JavaScript難読化ツール「PreEmptive Protection for JavaScript」

 「PreEmptive Protection for JavaScript」評価版は以下からお申込みいただけます。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11738 2019/10/07 18:12

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング