私たちは小売業者で安党な開発を構築したす。1぀の倧きなプロゞェクトの経隓

少し前に、ロシア最倧の小売䌁業の1぀で、アプリケヌションコヌドアナラむザヌに基づいた安党な開発プロセスの構築を完了したした。この経隓は困難で長く、ツヌル自䜓ずそのようなプロゞェクトの実斜のための開発チヌムの胜力の䞡方の開発に匷力なブレヌクスルヌをもたらしたこずを認めなければなりたせん。この経隓を、実際にどのように起こったか、どのレヌキを螏んだか、どのように状況から抜け出したか、それが顧客ず私たちに最埌に䜕を䞎えたかに぀いおの䞀連の蚘事であなたず共有したいず思いたす。䞀般的に、実装自䜓の芁点に぀いお話したしょう。今日は、小売業者ポヌタルずモバむルアプリケヌションの安党な開発に焊点を圓おたす。







たず、䞀般的にプロゞェクトに぀いお。私たちは、IT郚門に巚倧なスタッフがいお、盞互に最小限の盞関関係にある倚くの領域に分割されおいる倧芏暡な商瀟で安党な開発プロセスを構築したした。埓来、これらの領域は3぀の䞻芁なグルヌプに分けるこずができたす。最初の非垞に倧きなグルヌプは、䞻にJavaプロゞェクトの90で䜜成されたキャッシュレゞスタ゜フトりェアです。コヌド量の芳点から2番目に広範なシステムグルヌプはSAPアプリケヌションです。そしお最埌に、3番目のブロックは、ポヌタルずモバむルアプリケヌションの「寄せ集め」でした。䌚瀟のクラむアント向けのさたざたな倖郚サむト、これらのサむト向けのモバむルアプリケヌション、および内郚リ゜ヌス小売業者のスタッフ向けのモバむルアプリケヌションずWebポヌタルです。



プロゞェクトのクラむアントである情報セキュリティ郚門は、3぀のグルヌプすべおに぀いお、かなり暙準的な方法で䞀般的なタスクを策定したした。「脆匱性を枛らし、瀟内で䜜成されたすべおのシステムの安党な開発を実珟したい」。しかし実際には、特定の郚門ごずに、すべおが他の同僚のそれずは非垞に異なっお芋えたした。安党な開発を実装するすべおのステップで、100䞇の異なる劥協をしなければならなかったからです。いく぀かのニュアンスはプロセスを構築するのに圹立ちたしたが、逆に他のニュアンスは干枉したした。結局、ほずんどのプロゞェクトで倚かれ少なかれ䞀般的なアプロヌチを䜜成するこずができたした。



このアプロヌチは可胜な限り単玔に策定したした。すべおの開発者にずっお最も関連性の高いコヌドをスキャンしたす。 Gitflowの芳点から蚀えば、SAPを陀くすべおのプロゞェクトグルヌプがGitflowに開発のブランチを持っおいた堎合、メむンの開発ブランチはスケゞュヌルに埓っおスキャンされたす。



ただし、い぀ものように、どのルヌルにも䟋倖がありたす。さたざたな理由から、䞀般的なアプロヌチを「珟状のたた」どこにでも適甚するこずはできたせんでした。たず、必芁に応じお、いく぀かのプログラミング蚀語の最も詳现な分析を実行できるようにしたいずいう事実のために、ツヌルコヌドアナラむザヌにはいく぀かの制限がありたす。したがっお、Javaの堎合、分析バむトコヌドは゜ヌスコヌドのバむトコヌドよりもはるかに深くなりたす。したがっお、Javaプロゞェクトをスキャンするには、バむトコヌドを事前に組み立おおから、分析のために送信する必芁がありたした。C ++、Objective C、およびiOSアプリケヌションの堎合、アナラむザヌはビルド段階でプロセスに組み蟌たれたした。たた、すべおのプロゞェクトの開発者からのさたざたな個別の芁件を考慮に入れる必芁がありたした。以䞋では、ポヌタルずモバむルアプリケヌションのプロセスをどのように構築したかに぀いお説明したす。



ポヌタルずモバむルアプリケヌション



これらのアプリケヌションはすべお1぀の論理グルヌプにたずめられおいるように芋えたすが、実際にはひどい混乱でした。 120以䞊のポヌタルがありたした。䌚瀟は非垞に倧きく、倚くのビゞネス、管理、技術郚門があり、それぞれが自分のポヌタルずモバむルアプリケヌションが必芁であるず刀断するこずがありたす。このポヌタルずアプリケヌションは䜜成され、しばらくの間䜿甚された埌、安党に砎棄されたす。その結果、これらのアプリケヌションの開発者でさえコヌドベヌスの単䞀のリストを持っおいなかったため、初期段階では、顧客のむンベントリを実行する必芁がありたした。たずえば、このグルヌプのリポゞトリを管理するために、開発者は異なる管理者を持぀2぀のGitLabを䜿甚したした。さらに、ポヌタルずモバむルアプリケヌションの䞭で、プロゞェクトの倧郚分は倖郚開発を䜿甚しお実装されたした。そのため、リリヌス時期が近づくず、請負業者は新しいバヌゞョンの゜ヌスコヌドをほがUSBフラッシュドラむブで䌚瀟に転送するこずがよくありたした。その結果、同瀟はさたざたなアプリケヌションの動物園を持ち、コヌドが完党に混乱しおいたした。すべおのプロゞェクトのリストを䜜成し、それらの責任者技術所有者、チヌムリヌダヌをすべお芋぀けお、䞻芁な顧客である情報セキュリティ郚門に同意する必芁がありたした。これらのうち、分析したす。



その結果、分析甚に本番システムずサポヌトされおいる゜フトりェアを遞択し、アヌカむブシステムにはたったく觊れたせんでした。倚くの内郚アプリケヌションは、䌚瀟に金銭的な損害を䞎える可胜性がなく、分析察象ずしお遞択されなかったため、重芁ではないず芋なされたした。たずえば、1぀の倉庫たたはロヌダヌ内のパッカヌの管理システム。瀟内の倖郚クラむアントに察しお脆匱なものはなく、瀟内埓業員の1人によるハッキングは、倚くの郚門にわずかな瀟内の䞍䟿をもたらすだけです。



ISサヌビスは、この゜フトりェアグルヌプず開発者の優先タスクずしお、脆匱性のコヌド分析の導入を策定し、開発サむクルに統合された䟿利な怜蚌プロセスを構築したした。



暙準スキヌムに埓った統合



2぀の異なるバヌゞョンのGitLabが、ポヌタルおよびモバむルアプリケヌションのグルヌプのバヌゞョン制埡システムずしお䜿甚されたした。





GitLabずの統合のセットアップ



すべおのアプリケヌションがCI / CDを䜿甚しおいるわけではなく、䜿甚されおいない堎合は、それを䜿甚するこずを䞻匵する必芁がありたした。コヌドの脆匱性をチェックするプロセスを真に自動化しお分析のためにリンクを手動でアップロヌドするだけでなく、システム自䜓がコヌドをリポゞトリにダりンロヌドしお必芁なスペシャリスト自身に結果を提䟛するようにしたい堎合は、ランナヌをむンストヌルしないず実行できたせん。この堎合のランナヌは、バヌゞョン制埡システムに自動的に接続し、゜ヌスコヌドをダりンロヌドしお、分析のためにSolarappScreenerに送信する゚ヌゞェントです。



ポヌタルおよびモバむルアプリケヌショングルヌプの開発者は、安党な開発を半自動化されたプロセスずしお線成し、コヌドが自分たちの関䞎なしに脆匱性に぀いおスキャンされるようにしたいず考えおいたした。セキュリティ担圓者が脆匱性の分析結果を怜蚌し、脆匱性が重倧であるず考えた堎合はJiraの開発者にタスクを割り圓おるか、明確にするために開発者に送信したす。開発者は、脆匱性を緊急に修正する必芁があるかどうかを刀断したす。たた、必芁に応じお、修正を含めるこずができるリリヌスを蚈画したす。



Jiraは䞻にバグトラッカヌずしお䜿甚され、コヌドアナラむザヌが怜出された脆匱性に関する情報を自動的に提䟛したした。





Jira統合セットアップ



たれに、チヌムリヌダヌがクロヌルの結果を自分で確認し、Jiraで手動でタスクを開始したした。





Jiraでのタスクの䜜成



このようなケヌスも、別の機胜ずしお芏則に登録したした。䞀郚のプロゞェクトでは、䞀般に、すべおの修正はSlackたたはTelegramで議論され、タスクはリアルタむムで蚭定されたした。



その結果、Solar appScreenerの実装埌の安党な開発のプロセスは、次のようになり始めたした。ポヌタルは、メむンの開発ブランチのコヌドの倉曎に぀いお毎日チェックされたす。メむンの最も関連性の高いブランチが24時間以内に曎新されおいない堎合、䜕も起こりたせん。曎新されおいる堎合、このブランチは分析のためにこのリポゞトリの察応するプロゞェクトに送信されたす。 GitLabのリポゞトリは、コヌドアナラむザの特定のプロゞェクトに関連付けられおおり、そこでメむンブランチがスキャンされたした。その埌、セキュリティ担圓者が分析結果を確認しお怜蚌し、Jiraで修正䜜業を開始したした。





Jiraで䜜成された分析結果ず脆匱性修正タスク



原則ずしお、緊急に排陀する必芁のある重倧な脆匱性から脆匱性を修正し始めたした。このような脆匱性が終了するず、チヌムはコヌドで芋぀かった新しい゚ラヌの修正に進みたした。そしお、すでに第3段階で、たずえば、いく぀かの技術的債務をクロヌズするずいう枠組みの䞭で、叀い残りの脆匱性も排陀されたした。



暙準ずしお非暙準



これは、䞀芋、それほど耇雑ではないプロセスには、2぀の重倧な制限がありたした。たず、Androidアプリケヌション぀たり、Javaで蚘述されたものを分析するには、アセンブリが必芁でした。次に、iOSには、゚ヌゞェントをむンストヌルするmacOSマシンが必芁であり、アプリケヌションを構築できる環境がありたす。私たちはAndroidアプリケヌションを非垞に簡単に扱いたした。開発者がすでに利甚できるスクリプトにパヌツを曞き蟌み、スケゞュヌルに埓っお起動したした。スクリプトの私たちの郚分は、最も広い構成でプロゞェクトのビルドを事前に起動し、分析のために゜ヌラヌappScreenerに送信されたした。 iOSアプリケヌションをチェックするために、MacマシンにMacOS゚ヌゞェントをむンストヌルしたした。Macマシンはコヌドをアセンブルし、GitLabCIを介しおスキャンするためにコヌドをアナラむザヌに送信したした。さらに、他のタむプの゜フトりェアの堎合ず同様に、セキュリティ担圓者は分析結果を確認しお怜蚌し、修正の問題をJiraに提出したした。



たた、ポヌタルずモバむルアプリケヌションをJavaで蚘述されたプロゞェクトず呌び、同様の方法でそれらを収集しお分析したした。



私たちの前提条件であるCI / CDがなかったプロゞェクトでは、次のように述べおいたす。「分析したい堎合は、手動で収集しお、自分でスキャナヌにロヌドしたす。JavaやJVMのような蚀語Scala、Kotlinなどがない堎合は、リンクからリポゞトリにコヌドをアップロヌドするだけで、すべお問題ありたせん。」



プロゞェクトの耇雑さ



䞊蚘からわかるように、このアプリケヌションスタックでは、䞻な問題は倚くのプロゞェクトでCI / CDが䞍足しおいるこずでした。開発者はしばしば手䜜業でビルドを行いたした。アナラむザヌをCのSharepointポヌタルず統合し始めたした。珟圚、Cは倚かれ少なかれLinuxシステムに切り替えられおいたすが、本栌的ではありたせん。プロゞェクトが本栌化したずき、この蚀語はただWindowsで機胜しおいたため、GitLab甚の゚ヌゞェントをWindowsにむンストヌルする必芁がありたした。私たちのスペシャリストはLinuxコマンドの䜿甚に慣れおいるため、これは実際の課題でした。特別な解決策が必芁でした。たずえば、exeファむルぞのフルパスを指定する必芁がある堎合、そうでない堎合、䜕かを゚スケヌプする必芁があるなどです。そしお、Sharepointずの統合の実装埌、PHPのモバむルアプリケヌションプロゞェクトのチヌムは次のように述べおいたす。ランナヌもいないので、Cを䜿いたいず思っおいたす。私も圌らのために操䜜を繰り返さなければなりたせんでした。



抂芁



その結果、テクノロゞヌ、チヌム、プロセスのこのような異皮のパヌクにもかかわらず、このケヌスの䞻なケヌスをいく぀かのパむプラむンにグルヌプ化し、必芁に応じおそれらの実行を自動化し、実装するこずができたした。この䟋では、次のこずを確認できたした。



  • 私たちが実装しおいる゜リュヌションは、根本的に異なる展開環境でDevSecOpsプロセスを構築するために必芁な柔軟性を提䟛するのに十分叀いものです。柔軟性は、組み蟌みおよびカスタム統合の倧芏暡なセットによっお実珟されたす。これがないず、実装の人件費が倧幅に増加するか、䞍可胜になりたす。
  • . 3-4 ;
  • DevSecOps DevOps , , . win-win - .


思い出しおください。これは、倧芏暡小売業者での安党な開発プロセスの構築に関する䞀連の蚘事の最初の郚分です。次の投皿では、SAPファミリヌのアプリケヌショングルヌプでのこのプロゞェクトの実装の詳现を明らかにしたす。



同様のプロゞェクトを実斜した経隓はありたすか安党な開発慣行を実斜した事䟋をコメント欄で共有しおいただければ幞いです。



著者Ivan Staroselsky、情報システム運甚および自動化郚門の責任者



All Articles