一つ前の記事で難読化コードについて書いたら長くなりそうだったので、記事を独立化させてもう一つ記事を書いてみた。いつものごとく下書き書いてAIに加筆してもらった汗
コード難読化の技術とそのセキュリティ上の利点と欠点|サイバーセキュリティ.com
---------------------------------
オープンソース≠安全:難読化コードが潜む見えない脅威
オープンソースソフトウェアは透明性が高く安全だと思われがちですが、実際には難読化コードによって隠された脅威が存在する可能性があります。現在多くの企業や個人がオープンソースソフトウェアを利用していますが、「オープンソース=セキュリティ的に安全」という認識は必ずしも正しくありません。本記事では、オープンソースの安全性に関する誤解や難読化コードがもたらす危険性、そして安全に利用するための対策について詳しく解説します。
オープンソースの普及と安全性の誤解
現在、ほとんどの企業がオープンソースソフトウェア(OSS)を使用しています。直接的にオープンソースアプリケーションを利用していなくても、多くのアプリケーションはサードパーティやオープンソースのライブラリとコンポーネントを使用しています。これらのサードパーティコードは、開発のスピードとコストの点で組織に大きなメリットをもたらします1。
多くの人が「オープンソースは多くの目でチェックされているから安全」と考えています。実際に、OSSがプロプライエタリソフトウェア(商用ソフトウェア)よりもセキュリティ的に危険であるという証拠はなく、むしろ多くの開発者によってレビュー・検証が行われているため、脆弱性が見つかりやすく、修正が迅速に行われる傾向があるとされています5。
しかし、この考え方には重大な落とし穴があります。オープンソースコンポーネントに悪用可能な脆弱性や悪意のある機能が含まれている場合、組織のアプリケーションが攻撃にさらされる可能性があるのです1。特に難読化されたコードが含まれる場合、そのリスクは著しく高まります。
難読化コードとは何か:見えない脅威の正体
難読化(Obfuscation)は、ソフトウェアやコード、データの内容を第三者が理解しにくい形に変換し、解析や改ざんを防ぐための技術です。難読化されたコードは、その動作や処理が意図通りに実行されるものの、ソースコードやアルゴリズムの構造が複雑化されているため、外部から読み解いたり逆コンパイルしたりするのが困難になります2。
難読化は本来、プログラムの著作権を保護したり、悪意ある第三者によるソフトウェアの解析を防ぐ目的で使用され、特にセキュリティ関連のアプリケーションやライセンス保護のためのソフトウェアで広く活用されています2。しかし、この同じ技術が悪意を持って使用されると、危険なコードを隠蔽するための強力な手段になり得るのです。
難読化の具体的な手法には、変数名や関数名を意味のない名前に変更する方法、プログラムの動作に影響を与えない無意味なコードを挿入する方法、制御フローを複雑に変更する方法などがあります26。これらの技術によって、悪意のあるコードがあったとしても、それを発見することは非常に困難になります。
難読化がもたらす現実的な脅威
難読化コードが潜むオープンソースソフトウェアの危険性は、理論上の問題ではなく現実に起きている問題です。例えば、2024年初頭に発見された「XZ Utils」によるバックドア事件は、オープンソースの脆弱性が国家安全保障の問題にまでつながることを示しました7。
XZ UtilsはLinuxシステムで広く使われるオープンソースの圧縮ツールで、多くの企業や政府機関が利用していました。この事件では中国・ロシアの関与が疑われており、XZ Utilsに意図的なバックドアが仕掛けられていて、リモートからLinuxサーバーに接続し、制御権を奪う可能性があったのです7。
オープンソースは蔦のように絡まり合っており、ひとつに侵入されると、被害はそこでとどまらず、それを使った多数のプレイヤーにまで広がります7。そして、これは決して稀な例ではありません。実際にオープンソースライブラリにバックドアを仕掛けられ、ユーザーのお金を盗む仕組みを作られた事例も報告されています。
「無料」という誘惑がもたらす高いコスト
オープンソースの危険性についてもう一つ注意すべき点は、「無料」という魅力に引かれて安易に採用してしまうリスクです。無料で利用できるオープンソースソフトウェアだと思っていたものが、後から突然有料化される例が増えています。
その代表例が、プログラミング言語「Python」用の開発環境である「Anaconda」です。核となるソフトはオープンソースとして公開されており、ユーザーは開発元のWebサイトからソフト一式を無料でダウンロードできますが、2020年4月からは一部有償化され、従業員が200人を超える企業は有償版を購入する必要が出てきました4。
また、コンテナ管理ツールである「Docker Desktop」も2021年8月に有償化が発表され、2022年2月から有償化が開始されました4。多くの組織がこれらのツールを業務に組み込んでいた場合、突然の有償化は大きな負担となります。
これらのソフトウェアの実態は、OSS由来の商用ソフト/商用SaaSであり、業務部門に所属するエンドユーザーには、そうした認識が浸透していないのが現状です4。節約のつもりで無料のオープンソースに飛びついたはいいものの、後で大きなコストを強いられる可能性があるのです。
安全なオープンソース利用のための対策
では、オープンソースを安全に利用するためには、どのような対策が必要でしょうか。以下に主要な対策をご紹介します。
信頼できるソースからのダウンロード
OSSは様々なソースからダウンロードすることができますが、信頼できないソースからダウンロードした場合、マルウェアが仕込まれている可能性があります。そのため、OSSをダウンロードする際には、信頼できるソースからダウンロードするようにしましょう5。信頼できるソースとは、そのプロジェクトの公式サイトや、信頼性の高いリポジトリなどを指します。
最新バージョンの使用とアップデート
OSSには、脆弱性を修正するためのアップデートが提供されています。最新のバージョンを使用することで、脆弱性による被害を防ぐことができます5。また、OSSは定期的にアップデートが行われているため、アップデートを定期的に行うことで、最新の機能やセキュリティ修正を適用することができます。
セキュリティツールの活用
OSSを利用する際には、さまざまなセキュリティツールを活用することも重要です。ソフトウェア・コンポジション解析(SCA)ツールは、ソフトウェアを自動的に解析し、ソフトウェア部品表(SBOM)を作成します。これは必要な可視性を実現し、脆弱性とライセンスの問題を特定するのに役立ちます1。
また、静的アプリケーション・セキュリティ・テスト(SAST)や動的アプリケーション・セキュリティ・テスト(DAST)などのツールを使用して、コードの安全性を検証することも有効です1。
コードレビューと専門家の関与
可能であれば、導入前にセキュリティの専門家によるコードレビューを実施することで、難読化コードに隠された悪意のあるコードを発見できる可能性が高まります。特に重要なシステムに組み込む場合は、この工程を省略せずに実施するべきでしょう。
開発コミュニティの信頼性確認
オープンソースプロジェクトの開発コミュニティの活発さ、過去の脆弱性対応の迅速さ、コミュニティの規模などを確認することも重要です。活発なコミュニティによって維持されているプロジェクトは、脆弱性が発見された際の対応も迅速である傾向があります。
結論:無料に飛びつく前に考えるべきこと
オープンソースソフトウェアには多くのメリットがありますが、完全に安全であるわけではありません。特に難読化コードが含まれている場合、高スキルのエンジニアでさえチェックをすり抜ける可能性が高く、悪意のあるコードの発見は困難です。
「無料だから」「オープンソースだから安全」という思い込みで安易に採用すると、セキュリティインシデントや突然の有料化など、取り返しのつかない事態を招く可能性があります。結果として、節約のつもりが非常に高い買い物になってしまうのです。
オープンソースを利用する際は、提供元の信頼性を確認し、適切なセキュリティ対策を講じることが重要です。無料のものに飛びつく前に、そのソフトウェアが本当に安全かどうか、将来的なリスクはないかを慎重に検討しましょう。
最終的には、「無料」という言葉に惑わされることなく、セキュリティと信頼性を優先した選択をすることが、長期的に見て最も賢明な判断となるでしょう。安全性を疑わしいオープンソースを避けることは、コスト削減ではなく、重要なリスク管理の一環だと考えるべきです。
Citations:
- https://www.checkpoint.com/jp/cyber-hub/cloud-security/what-is-open-source-security/
- https://cybersecurity-jp.com/security-words/99425
- https://feel-design.jp/blog/706/
- https://xtech.nikkei.com/atcl/nxt/column/18/00989/021700169/
- https://office-hiro.jp/%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E7%9A%84%E3%81%AB%E5%8D%B1%E9%99%BA%EF%BC%9F/
- https://secure.stylemap.co.jp/malware/making-programs-unreadable-what-is-obfuscation/
- https://techblitz.com/startup-interview/socket/
- https://www.xserver.ne.jp/blog/seo-basic-knowledge/
- https://eset-info.canon-its.jp/malware_info/special/detail/230228.html
- https://www.sompocybersecurity.com/column/glossary/obfuscation
- https://gmotech.jp/semlabo/seo/blog/seo-blog/
- https://www.iwi.co.jp/blog/security/activediffence/20220913/
- https://www.hypertech.co.jp/column/marketing/2023/06/app-obfuscation/
- https://enfactory.co.jp/media/seo-blog/
- https://www.blackduck.com/ja-jp/blog/open-source-trends-ossra-report.html
- https://www.fortinet.com/jp/blog/threat-research/analyzing-malicious-intent-in-python-code
- https://mediareach.co.jp/blog/ai-article-seo
- https://news.mynavi.jp/techplus/article/20240122-2863433/
- https://www.proofpoint.com/jp/blog/threat-insight/Increasingly-Sophisticated-Phishing-HTML-Obfuscation-Latest-Tricks2
- https://ikel.co.jp/column/3653.html
- https://japan.zdnet.com/article/35190872/
- https://recruit-it-remote-works.com/remomaga/javascript-obfuscation-effect-ai-advances/
- https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13251552323
- https://it-trend.jp/file_transfer/article/104-0002
- https://exactly-pc.com/2512/
- https://japan.zdnet.com/article/35185467/
- https://business.nikkei.com/atcl/seminar/19/00058/061000055/
- https://www.marubeni-idigio.com/insight-hub/about-oss/
- https://www.kagoya.jp/howto/it-glossary/develop/oss/
- https://www.ys-law.jp/IT/%E3%82%B3%E3%83%A9%E3%83%A0/%E2%97%86%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%EF%BC%88oss%EF%BC%89%E5%88%A9%E7%94%A8%E6%99%82%E3%81%AB%E6%B3%A8/
- https://atmarkit.itmedia.co.jp/ait/articles/2201/13/news011.html
- https://resource-sharing.co.jp/open-source-merit-demerit/
