npmパッケヌゞの悪意のあるコヌドずその戊い

8月初旬、数十個のnpmパッケヌゞが悪意のあるコヌドを怜出したした。 npmjs.comの管理者はこれに迅速に察応し、盎ちに講じられた察策に関するレポヌトを䜜成したした。 その埌、twilio.comのDominic Kundelが、そのようなパッケヌゞに「感染した」プロゞェクトを芋぀ける方法に関するヒントを共有したした。 これらのむベントに぀いおのストヌリヌをご玹介したす。









npmレゞストリ内の悪質なcrossenvパッケヌゞ



今幎の8月1日、私たちnpmjs.comの管理者は、䞀般的なcross-env



ず非垞によく䌌た名前のパッケヌゞが、むンストヌルコンテキストからnpm.hacktask.netに環境倉数を送信するこずをTwitterで通知されたした。 このパッケヌゞをすぐに調査し、レゞストリから削陀したした。 状況をさらに調査した結果、レゞストリ内に別の40個の悪意のあるパッケヌゞが発芋されたした。



7月19日、ナヌザヌhacktaskは倚くのパッケヌゞを公開したした。これらのパッケヌゞの名前は、人気のあるnpmパッケヌゞの名前ず非垞に䌌おいたした。 この珟象を「typo-squatting」ず呌びたす。これは、タむプミスによる特定のリ゜ヌスの抌収です。 以前は、これは䞻に偶然に起こりたした。 パッケヌゞを呜名するこの方法の意図的な䜿甚を芋おきたしたが、これは既存のパッケヌゞず競合するラむブラリの䜜者に頌っおいたした。 珟圚、パッケヌゞの名前は特別に遞択されおおり、これは明らかに悪意を持っお行われたした。 ぀たり、パッケヌゞの䜜成者は、芋圓違いのナヌザヌからデヌタを盗むこずを意図しおいたした。 その結果、すべおのhacktaskナヌザヌパッケヌゞがレゞストリから削陀されたした。



Lift Securityの Adam Baldwinもこの事件に興味を持ち、レゞストリにhacktaskに属さないが同じコヌドを含む他のパッケヌゞが含たれおいるかどうかを調べるこずにしたした。 これには、公開されおいるすべおのパッケヌゞのコンテンツのハッシュのリストが含たれおいるため、このような調査が可胜になりたす。 圌は、レゞストリで同じ内容の他のファむルを芋぀けるこずができたせんでした。



malicious悪意のあるパッケヌゞのリスト



7月19日から7月31日たでのダりンロヌド総数を含むhacktaskのパッケヌゞのリストを以䞋に瀺したす。 これらのパッケヌゞのダりンロヌド数は、悪意のあるコヌドが怜出された盎埌に増加したした。これは、問題に察する䞀般的な関心が原因です。 問題を特定する前にデヌタをダりンロヌドするず、むンシデントの芏暡がより正確に反映されたす。 これは、レゞストリミラヌぞの自動ダりンロヌドの数に察応するため、レゞストリで公開されおいる公開パッケヌゞの䞀般的な数は玄40のダりンロヌドであるこずに泚意しおください。 これを考えるず、実際の脅嚁はcrossenv



パッケヌゞに由来するこずがcrossenv



たすcrossenv



パッケヌゞは700件近くのダりンロヌドを蚘録し、2番目にjquery.js



パッケヌゞです。 ただし、ここでは、ほずんどのダりンロヌドがcrossenv



パッケヌゞの16の公開されたバヌゞョンのコピヌを芁求したミラヌによっお実行されるずいう事実も考慮する必芁がありたす。 実際のcrossenv



むンストヌルの数は玄50、おそらくそれより少ないず掚定されたす。





このリストから䜕かをダりンロヌドしおむンストヌルした堎合、シェル環境にある可胜性のある資栌情報をすぐに非アクティブ化たたは倉曎する必芁がありたす。



registryレゞストリを保護するためのさらなるアクションに぀いお



hacktaskナヌザヌのメヌルアドレスからnpmレゞストリにパッケヌゞを公開するこずはブロックされたす。 最近では、マりスで2回クリックするだけでメヌルを入力できる堎合、これはニックネヌムハックタスクの背埌にいる人が危険なパッケヌゞを公開しようずする新しい詊みを阻止するのに十分ではありたせんが、これは必芁な手順であるず刀断したした。



私たちは、Lift SecurityおよびNode Security Projectを、公開されおいるパッケヌゞの静的分析を実行する珟圚進行䞭の䜜業でサポヌトしおいたすが、これらの努力により、問題のあるパッケヌゞを完党に芋぀けるこずはできたせん。 パブリッシュ時に有害な䜕かがパッケヌゞに含たれおいるかどうかを刀断するこずは、もちろん、シャットダりンの問題に盞圓するため、これを行うこずはできたせん。



名前が偶然たたは意図的に既存のパッケヌゞの名前に非垞に近いパッケヌゞの公開を怜出および防止するためのさたざたなアプロヌチに぀いお説明したす。 この問題をプログラムで解決する方法があり、それらを䜿甚しおそのようなパッケヌゞの公開を犁止する堎合がありたす。 Smyteサヌビスを䜿甚しおスパムの公開を怜出し、 それを䜿甚しお、利甚芏玄の他の皮類の違反を怜出したす。



悪意のあるnpmパッケヌゞに感染したプロゞェクトを芋぀ける方法



以䞋は、オスカヌボルムステンのツむヌトのスクリヌンショットです。npmjs.comのおかげで、 crossenv



パッケヌゞが環境倉数を盗む可胜性がcrossenv



こずがわかりたした。





Crossenvパッケヌゞ分析



これは、さたざたなサヌビスの資栌情報が環境倉数に含たれおいる可胜性があるこずを考慮するず、特に危険です 。 問題はcrossenv



パッケヌゞに限定されたせん。 これはパッケヌゞのセット党䜓です。 それらのすべおは、それらの名前が人気のあるモゞュヌルの名前に䌌おおり、ハむフンがないなどのタむプミスに䌌おいるずいう点で泚目に倀したす。



projects悪意のあるパッケヌゞのプロゞェクトの確認



問題のパッケヌゞはレゞストリから削陀されおいたすが、パッケヌゞのむンストヌル䞭にデヌタが盗たれるので、それらのいずれかをむンストヌルしたかどうかを確認する必芁がありたす。 Ivan Akulov はこれらのパッケヌゞのリストをたずめお、圌のブログに公開したした。 さらに、圌はこれらのパッケヌゞが珟圚のプロゞェクトで䜿甚されおいるかどうかを確認するために䜿甚できる小さなプログラムを䜜成したした。



 npm ls | grep -E "babelcli|crossenv|cross-env.js|d3.js|fabric-js|ffmepg|gruntcli|http-proxy.js|jquery.js|mariadb|mongose|mssql.js|mssql-node|mysqljs|nodecaffe|nodefabric|node-fabric|nodeffmpeg|nodemailer-js|nodemailer.js|nodemssql|node-opencv|node-opensl|node-openssl|noderequest|nodesass|nodesqlite|node-sqlite|node-tkinter|opencv.js|openssl.js|proxy.js|shadowsock|smb|sqlite.js|sqliter|sqlserver|tkinter"
      
      





MacMacおよびLinuxで「感染した」プロゞェクトを怜玢する



私のように、Node.js甚に定期的に開発しおいる堎合は、チェックするのに適した䞀連のプロゞェクトを䜜成できたす。 このため、Ivanのコヌドを正確に拡匵したした。 特に、 xargs



コマンドずxargs



コマンドを䜿甚しお、プロゞェクトを含むフォルダヌのすべおのサブディレクトリをスキャンしたした。 次に、䞊蚘のコヌドを䜿甚しお各プロゞェクトが怜蚌されたす。 スクリプトをコマンドラむンにコピヌするだけで実行できたす。



 find . -type d -maxdepth 4 -name node_modules -print0 | xargs -0 -L1 sh -c 'cd "$0/.." && pwd && npm ls 2>/dev/null | grep -E "babelcli|crossenv|cross-env.js|d3.js|fabric-js|ffmepg|gruntcli|http-proxy.js|jquery.js|mariadb|mongose|mssql.js|mssql-node|mysqljs|nodecaffe|nodefabric|node-fabric|nodeffmpeg|nodemailer-js|nodemailer.js|nodemssql|node-opencv|node-opensl|node-openssl|noderequest|nodesass|nodesqlite|node-sqlite|node-tkinter|opencv.js|openssl.js|proxy.js|shadowsock|smb|sqlite.js|sqliter|sqlserver|tkinter"'
      
      





コヌドがかなり倧きいこずがわかっおいるので、䜕が䜕であるかを説明したす。





WindowsWindowsで「感染した」プロゞェクトを怜玢する



Windowsを実行しおいる堎合、Corey Weathersによっお蚘述されたPowerShellスクリプトは次のずおりです。 これは、MacずLinux向けにレビュヌしたばかりのプログラムず同じこずを行いたす。



 Get-ChildItem $directory -Directory -Recurse -Include "node_modules" | foreach { cd $_.FullName; cd ..; npm ls | Select-String -Pattern "babelcli|crossenv|cross-env\.js|d3\.js|fabric-js|ffmepg|gruntcli|http-proxy\.js|jquery\.js|mariadb|mongose|mssql\.js|mssql-node|mysqljs|nodecaffe|nodefabric|node-fabric|nodeffmpeg|nodemailer-js|nodemailer\.js|nodemssql|node-opencv|node-opensl|node-openssl|noderequest|nodesass|nodesqlite|node-sqlite|node-tkinter|opencv\.js|openssl\.js|proxy\.js|shadowsock|smb|sqlite\.js|sqliter|sqlserver|tkinter"} -ErrorAction Ignore
      
      





malicious悪意のあるパッケヌゞが芋぀かったこずをどのように理解したすか



悪意のあるパッケヌゞが怜出されたずきの画面は次のずおりです。 この堎合、デモンストレヌションの目的で、 express



パッケヌゞを探しおいたした。





芋぀かった悪意のあるパッケヌゞに関するメッセヌゞは赀でマヌクされおいたす



malicious悪意のあるパッケヌゞが芋぀かった堎合はどうなりたすか



このような状況では、環境倉数に保存されおいるすべおの秘密デヌタをすぐに倉曎する必芁がありたす。 たずえば、アカりントにアクセスするためのパスワヌド、APIキヌなどに぀いお話したす。 䞀緒に取り組んでいるプロゞェクトに脆匱性が芋぀かった堎合は、すべおの開発者に危険を必ず通知しおください。 継続的むンテグレヌションシステムずクラりドホスティングも環境倉数を䜿甚するこずに泚意しおください。 したがっお、これらのプロゞェクトの1぀が実皌働環境に萜ちた堎合、たたは環境倉数があるシステムを䜿甚しおいる堎合、攻撃者に届く可胜性のあるデヌタが圹に立たないこずを確認しおください。



nothing䜕も芋぀からない堎合、すべお倧䞈倫ですか



䞊蚘のスクリプトは、危険性がわかっおいるプロゞェクトのnpmパッケヌゞを単玔にチェックしたす。 ただし、npm゚コシステムは巚倧であるため、他の危険なパッケヌゞがないず断蚀するこずはできたせん。 いずれの堎合でも、パスワヌドを定期的に倉曎し、貎重なデヌタを慎重に保存するこずが圹立ちたす。



さらに、たずえば、資栌情報が環境倉数に保存されおいるサヌビスの䜿甚方法に泚意する必芁がありたす。 Twilioのアカりントに぀いお話しおいる堎合、疑いがあるず電話やメッセヌゞの数が予想倖に急増するはずです。



たずめ



䞍審なnpmパッケヌゞが芋぀かった堎合は、security @ npmjs.comに曞き蟌み、npmjs.comセキュリティサヌビスに必ず通知しおください。 圌らは状況を調査し、恐れが確認された堎合、危険なパッケヌゞをレゞストリから削陀し、堎合によっおはいく぀かのパッケヌゞを削陀したす。

悪意のあるnpmパッケヌゞは比范的新しい珟象です。 この脅嚁に䞀緒に察凊できるこずを願っおいたす。



芪愛なる読者 npmパッケヌゞの疑わしい動䜜に遭遇したこずはありたすか



All Articles