趣味でつながる、仲間ができる、大人世代のSNS、趣味人倶楽部(しゅみーとくらぶ)

よくあるご質問

趣味人倶楽部のWebアプリは、26年前の腐り切った、糞言語のJavaScriptなんぞは廃棄して、安全でパフォーマンスの良い、AI時代にふさわしい最新言語で開発せんかい/JavaScriptは諸悪の根源=攻撃者に脆弱性を狙われるだけ、JITはパフォーマンス向上にはほとんど寄与しない/約30年前のカビが生えて腐り切ったJavaScriptを使うなんぞ、怠慢・いい加減さ・サボリ以外の何物でもない

【投稿者コメント】

 趣味人倶楽部のユーザ会員の皆様は、趣味人倶楽部のWebアプリに対して、こんな疑問を持たれた事はないだろうか?

 「どうして、それほど、複雑なWebアプリではないのに、ケヤレスミス、安易なバグ・欠陥ばかりか、ときには、深刻バグ・致命的なバグ=投稿コンテンツの消滅他が頻繁に発生するのか?」

 「そんなバグ・欠陥が放置されて、改修されるまでに、時間が掛かり過ぎるのでは?」

 「使い勝手が悪く、操作性向上の為の改善・要望がなかなか、受け入れられなくて、その改善が実現するまで、かなりの期間・時間を要するのは、なぜ、なんだろう?」

 ・・・などなど

 この疑問に、対する回答(推測理由)は、以下の通りだ。

①当該アプリは、CMS(コンテンツ・マネジメント・システム)と云って、Web頁、Webアプリの雛形・テンプレートを提供する、ソフトウェア・パッケージ(ライブラリ)を使用しており、多くの典型的なWebアプリ機能は、「コンテンツのテキスト文字情報」と「画像データ」をその雛形に流し込めば(アップデート投稿すれば)、半自動的に、閲覧・投稿頁として出来上がる様になっているが、出来合いの通常処理機能ではなくて、雛形と異なる処理を行おうとすれば、処理内容をWebアプリ言語のJavaScriptで、記述・書き起こすしかない。

②このWebアプリ言語のJavaScriptは、約26年前のWindows95時代に、Microsoft社が、効率的に、Webアプリが作成出来るとして、あの悪名高き、Adobe Flash Playerと共に、飛び付いて、Microsoftお抱えの、御謹製のWebアプリ開発環境ツールとして採用し、アプリ開発者・ベンダーへ提供したものである。

③1995年頃は、Webアプリが注目され出した頃で、Javaは、このWebアプリの根幹技術としてもてはやされ、「Java狂騒曲」が喧伝・吹き荒れていた。Javaは、本格的な、オブジェクト言語、コンパイル不要のインタープリター言語として有用性・安直性・可用性が強調されていた。その反面、Javaの弱点と云うより、致命的な欠陥である、「非効率性=実行速度が遅い、開発効率が悪い、派生クラスを継ぎ足す様な、難解・複雑なアプリになりやすい、効率性を優先した為、多数の脆弱性・危険性」が無視された。

④特に、JavaScriptは、安直に、効率的にWebアプリを作成出来るとして、アプリのソースをメモ帳の様な、テキストエディッターで簡単に書けて、そのテキストファイルを、Web頁のコンテンツに書き込んで、Javaライブラリーを組み込むだけで、簡単に、Webアプリが出来上がってしまうが、一方、その「脆弱性・危険性」や「実行効率性」や「ソース解読性=ソース修正のしやすさ」は、ほとんど、省(かえり)みられず、改善されなかった。

⑤長所だけに日が当たり、致命的な欠陥=短所がほとんど注目されなかった「Java狂騒曲」時代には、ITベンダーの新入社員が、タイトルに、「Java」を入れるだけで、新入社員が書いた書籍が売れた時代であり、それほど、「Java」は、浅はかな、軽薄な、「Webアプリ開発言語」だったと云う事だ。

⑥お題目では、JavaやJavaScriptは、本格的な、オブジェクト言語=構造化言語と云うものの、その実態は、言語としての縛(しば)り・規制がゆるく、派生クラスに派生クラスを継ぎ足す様な、屋上屋を架す様な、御法度(ごはっと)・御禁制の、ソースファイル群が作れてしまい、その結果、複雑怪奇な処理内容となり、ソースファイルを作成したプログラマーでも、後日、修正・改造を行う為に、作成したソースファイルの処理内容を追跡しようとしても、処理の流れすら、すぐに、把握出来ないと云う状況が発生しがちで、当該ソースを作成したプログラマー以外の、他のITベンダーのプログラマーが改修・改造しようとしても、処理内容が複雑怪奇な為に、判読・理解出来ずに、修正・流用をあきらめて、新たに、新規に、いちから、書き直すと云うのが、日常茶飯事となっている。

⑦プログラム言語の可読性は非常に重要な特性・機能であり、幾ら、簡単に使える、言語でも、プログラム作成者自身が後で、処理内容を把握出来ず、作成者以外の他人が、ほとんど、把握・理解出来ない様だと、後日、プログラム=アプリを改修・改善する事は出来ず、新規に、プログラム=アプリを作り直す事になり、ユーザが簡単に直せると思ったバグ・不具合・機能改善も、ほとんど、新規に「プログラム設計→コーディング=ソース作成→実装→テスト」をやり直すので、実現までに、期間・時間を要してしまう。

⑧事程左様(ことほどさよう)に、欠陥・問題の多い、26年来の、古臭い、JavaやJavaScriptは、もう、廃棄して、AI時代にふさわしい、最新言語に乗り換えるべきだろう。

 ちなみに、AI機能と相性のよい、Python言語はどうだ?
 CMSをPython言語で記述したものは多いから、そんなCMSを採用したら、カスタマイズ・手直しはやりやすく、可読性も良好だ。

 JavaやJavaScriptは、開発環境が無償で、利用しやすいからと云って、その脆弱性・危険性や難読性に依って、ユーザへ不利益をもたらしてよい理由にはならない。



 下記の【以下転載】は、JavaやJavaScriptやJITの多くの問題点を指摘しており、Microsoft社は自社製ブラウザのEdgeで、脆弱性の根の、JIT(ジャスト・インタイム・コンパイル)の使用をやめて、Intelが開発したハードウェアベースの新しいエクスプロイト緩和策「CET」(Controlflow-Enforcement Technology)や「ACG」(Arbitrary Code Guard)等の有力なセキュリティ緩和策の幾つかをレンダラーのプロセスへ組み込むテストを始めたと云う報告だ。

 ちなみに、「JITを無効化するとパフォーマンスは大幅に低下してしまうのではないかという懸念は残る。そこでJITの有無でWebブラウザのパフォーマンスがどれだけ変わるのかをテストした所、確かに幾つかのテストでは改善が見られたものの、ほとんどの場合は性能に大きな変化はない」と云う。

 さらに、この措置でどれほど、脆弱性が改善されるかと云うと、「2019年以降のCVE(脆弱性認識番号)を調査すると、JavaScriptエンジン「V8」で発見された脆弱性の内、約45%がJITエンジンに関するもので、さらに、Mozillaの指摘では、「Chrome」で修正前に悪用された(in the wild)ケースの内、半数以上がJITのバグを悪用している」と云う。


【以下転載】
https://forest.watch.impress.co.jp/docs/news/1342849.html
「JITをやめてみる~Microsoft、「Edge」で「めっちゃすげえセキュリティモード」をテスト/標的となっている「V8」の攻撃面を減らし、レンダラープロセスで強力な緩和策を有効化」
                   窓の杜 樽井 秀人 2021年8月6日 15:46

添付図1_「TurboFan」と「Sparkplug」で複雑化する「V8」のJIT

 米Microsoftは8月4日(現地時間)、「Microsoft Edge」の新しいセキュリティ機能「Super Duper Secure Mode」(意訳:めっちゃすげえセキュリティモード)を発表した。まだ実験的な段階で、名称も公式なものではないが、パフォーマンスよりもセキュリティを重要視するユーザーにとっては気になる存在になりそうだ。

 同社によると、JavaScriptエンジンの欠陥を突いた攻撃はさまざまだが、基本は長い間変わっておらず、だいたい以下のパターンで行われているという。

・オブジェクトの偽装
・プリミティブ(基本データ型)のアドレス取得
・任意の書き込み

 セキュリティチームが発見した欠陥はこのテンプレートにコピー&ペーストするだけで実証可能で、攻撃者は「PwnJS」のようなフレームワークを用いて即座に悪用できる体制を整えている。

 しかし、これは防御側としては悪夢だ。欠陥を発見するとすばやく対処し、ユーザーにアップデートを促さなければならない。そのため、MicrosoftやGoogle、MozillaといったWebブラウザーベンダーは欠陥を見つけ出す手法の開発に大規模な投資を行うとともに、大規模な懸賞プログラムを用意してハッカーに問題の報告を促している。にもかかわらず、JavaScriptエンジンはWebブラウザーにとってのセキュリティ上の課題であり続けているのが現状といえる。

 そこで同社のセキュリティチームが提案するのが、「ジャストインタイムコンパイル」(JIT)と呼ばれるJavaScriptエンジンのパフォーマンス技術をいっそのことやめてしまおうという解決策だ。

 2019年以降のCVE(脆弱性に割り当てられる認識番号)を調査すると、JavaScriptエンジン「V8」で発見された脆弱性のうち、約45%がJITエンジンに関するものだという。さらに、Mozillaが指摘するところによると、「Chrome」で修正前に悪用された(in the wild)ケースのうち半数以上がJITのバグを悪用している。

 JITはWebブラウザーのパフォーマンスを少しでも引き上げるために年々複雑化しているが、修正を必要とするセキュリティ欠陥の半数を生み出している。果たして速度アップに見合う価値があるだろうか――というわけだ。

関連記事:
・「Google Chrome 91」はパフォーマンスが最大23%向上 ~「V8」エンジンに2つの大きな改善
 https://forest.watch.impress.co.jp/docs/news/1327765.html

 また、JIT無効化のメリットは攻撃面(つまり、脆弱性)を減らすだけではない。「V8」のJITはその仕組み上、有力なセキュリティ緩和策のいくつかをレンダラーのプロセスで利用できない。たとえばIntelが開発したハードウェアベースの新しいエクスプロイト緩和策「CET」(Controlflow-Enforcement Technology)は、レンダラープロセスで活用できていない。また、RWXメモリページを使用しているため「ACG」(Arbitrary Code Guard)も無効化されている。こうした技術をレンダラープロセスにも適用できれば、セキュリティは飛躍的に向上するだろう。

関連記事:
・「Google Chrome 90」Windows版にハードウェアによるスタック保護が導入 ~巧妙な攻撃もシャットアウト!
 https://forest.watch.impress.co.jp/docs/news/1323802.html

 とはいえ、JITを無効化するとパフォーマンスは大幅に低下してしまうのではないかという懸念は残る。そこでJITの有無でWebブラウザーのパフォーマンスがどれだけ変わるのかをテストしたところ、たしかにいくつかのテストでは改善が見られたものの、ほとんどの場合は性能に大きな変化はないという。

添付図2_JITの有無でWebブラウザーのパフォーマンスがどれだけ変わるのかをテストした結果

 また、変化のあったテスト(ページ読み込み、メモリ使用量、起動時間、消費電力)をさらに詳しく調査したとことろ、消費電力では平均で15%の改善が見られたものの、かえって約11%増加したケースもあった。他のテストでも、改善もあれば悪化もあるのが実際のところのようだ。

 これまでJITはパフォーマンスアップの切り札として喧伝されてきた。たとえば「Speedometer 2.0」ベンチマークではJITを無効にすると58%もスコアが低下してしまう。しかし、実際のユースケースでユーザーはJITの無効化を体感できるだろうか。

添付図3_JITの改善と悪化の平均

 どちらにしろ、実際に2つのバージョンのWebブラウザーを比べてみないことには答えは得られないだろう。同社は今後数カ月をかけて、「Super Duper Secure Mode」プロジェクトでレンダラープロセスにおけるCET、ACG、CFG(Control Flow Guard、制御フロー ガード)の実装を進めていく計画だ。実際に試してみたい場合は、プレビュー版「Edge」(Beta/Dev/Canary)で試験段階の機能(edge://flags/)で「Super Duper Secure Mode」フラグを有効化してみるとよい。現時点ではJIT(TurboFan/Sparkplug)を無効にし、CETを有効にした状態をテストできる。ただし、WebAssemblyはまだサポートされていないので注意したい。

添付図4_「Super Duper Secure Mode」フラグ

編集部のおすすめ記事:
・「Microsoft Edge 92」にセキュリティアップデート ~最大深刻度は「High」
 https://forest.watch.impress.co.jp/docs/news/1342660.html

関連リンク:
・Microsoft Edge Web ブラウザーをダウンロード | Microsoft
 https://www.microsoft.com/ja-jp/edge
・Super Duper Secure Mode | Microsoft Browser Vulnerability Research
 https://microsoftedge.github.io/edgevr/posts/Super-Duper-Secure-Mode/
・「Microsoft Edge」Chromiumベースとなった新しい「Microsoft Edge」 - 窓の杜
 https://forest.watch.impress.co.jp/library/software/msedge/

関連記事:
・「Microsoft Edge」に「拡張安定版」が導入へ ~「Edge 94」から偶数バージョン更新、2021年8月3日
 https://forest.watch.impress.co.jp/docs/news/1341986.html
・「Microsoft Edge 92」が安定版に ~新しい[拡張機能]メニューが追加。パスワードの健全性を一目でチェック可能に、2021年7月26日
 https://forest.watch.impress.co.jp/docs/news/1339971.html

カテゴリ:インターネット・デジタル

コメント