Node.js アドオンで生活する ノート

Node.js アドオンで生活する

ネイティブモジュールは、C、C++、Objective-Cなどの言語で記述されたネイティブコードとNode.jsアプリケーションがインターフェースできるようにする、コンパイルされたNode.jsファイルです。これらのファイルは、マシンコードを含むことができ、それらをロードするNode.jsプロセスと同じ権限で実行されるコンパイルされたバイナリです。JavaScriptファイルとは異なり、.nodeファイルは読み取りできず、システムAPIを直接呼び出し、純粋なJavaScriptコードでは実行できない操作を実行できます。これらのアドオンは、Objective-C++を使用して、Node.jsから直接ネイティブmacOS APIを活用することができ、通常のサンドボックス化の外で任意のコードを実行できます。Electronアプリケーションは、多くの場合、アプリケーションのソースコードをパッケージ化するためにASARファイル形式を使用しますが、ASARの整合性チェックはデフォルトで無効になっています。有効にすると、ASARの整合性チェックは、実行時にASARアーカイブのヘッダーハッシュを検証し、アーカイブ内のファイルの改ざんを防ぎます。しかし、多くのアプリケーションは、コンパイルされた.nodeファイルをASARアーカイブ内から直接実行できないため、app.asar.unpackedの下で、検証済みのアーカイブの外から実行されます。これにより、ローカルの攻撃者は、WindowsでのDLLハイジャックと同様に、アンパックされたディレクトリ内の.nodeファイルを変更または置き換えることができます。この問題に対処するために、2つのツールが開発されました。Electron ASAR Scannerは、ElectronアプリケーションがASAR整合性保護を実装しているかどうかを評価し、NodeLoaderは、シンプルなネイティブNode.jsアドオンコンパイラです。Electron ASAR ScannerとNodeLoaderツールは、ネイティブモジュールを使用するElectronアプリケーションにおける潜在的なセキュリティ脆弱性を特定し、軽減するのに役立ちます。