{"id":31852,"date":"2019-10-31T21:43:30","date_gmt":"2019-10-31T18:43:30","guid":{"rendered":"https:\/\/prohoster.info\/blog\/strah-i-nenavist-devsecops\/"},"modified":"2019-10-31T21:43:30","modified_gmt":"2019-10-31T18:43:30","slug":"strah-i-nenavist-devsecops","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/strah-i-nenavist-devsecops","title":{"rendered":"Strach i nienawi\u015b\u0107 DevSecOps","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Mieli\u015bmy 2 analizatory kodu, 4 narz\u0119dzia do testowania dynamicznego, w\u0142asne wynalazki i 250 skrypt\u00f3w. Nie to, \u017ceby to wszystko by\u0142o potrzebne w obecnym procesie, ale skoro zacz\u0105\u0142em wdra\u017ca\u0107 DevSecOps, to trzeba to zrobi\u0107 do ko\u0144ca.<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/bcd78cc4963e397ecbaa18ffd43ce05e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i><noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/user\/narkos\">\u0179r\u00f3d\u0142o<\/a><\/noindex>. Autorzy postaci: Justin Roiland i Dan Harmon.<\/i><\/p>\n<p>Czym jest SecDevOps? A DevSecOps? Jakie s\u0105 r\u00f3\u017cnice? Bezpiecze\u0144stwo aplikacji - o czym to? Dlaczego klasyczne podej\u015bcie ju\u017c nie dzia\u0142a? Na wszystkie te pytania zna odpowied\u017a <b>Jurij Szabalin<\/b> z\u00a0<b>Swordfish Security. <\/b>Jurij szczeg\u00f3\u0142owo na wszystko odpowie i om\u00f3wi problemy zwi\u0105zane z przej\u015bciem od klasycznego modelu bezpiecze\u0144stwa aplikacji do procesu DevSecOps: jak prawid\u0142owo podej\u015b\u0107 do integracji procesu bezpiecznego rozwoju w proces DevOps i niczego przy tym nie zepsu\u0107, jak przej\u015b\u0107 przez g\u0142\u00f3wne etapy testowania na bezpiecze\u0144stwo, jakie narz\u0119dzia mo\u017cna stosowa\u0107, czym si\u0119 r\u00f3\u017cni\u0105 i jak je prawid\u0142owo skonfigurowa\u0107, aby unikn\u0105\u0107 pu\u0142apek.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"sYMWGw5Lyu4\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/sYMWGw5Lyu4\/hqdefault.jpg\" alt=\"Odtwarzaj wideo\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\n<b>O prelegencie:<\/b> <b>Jurij Szabalin - <\/b>G\u0142\u00f3wny architekt bezpiecze\u0144stwa w firmie <b>Swordfish Security<\/b>. Odpowiada za wdro\u017cenie SSDL, za og\u00f3ln\u0105 integracj\u0119 narz\u0119dzi analizy aplikacji w jedn\u0105 ekosystem\u0119 rozwoju i testowania. 7 lat do\u015bwiadczenia w bezpiecze\u0144stwie informacji. Pracowa\u0142 w Alfa-Bank, Sberbank i w Positive Technologies, kt\u00f3ra rozwija oprogramowanie i dostarcza us\u0142ugi. Prelegent mi\u0119dzynarodowych konferencji ZerONights, PHDays, RISSPA, OWASP.<\/p>\n<h2>Bezpiecze\u0144stwo aplikacji: o czym to?<\/h2>\n<p>\n<b>Bezpiecze\u0144stwo aplikacji<\/b>\u00a0to dzia\u0142 bezpiecze\u0144stwa, kt\u00f3ry odpowiada za bezpiecze\u0144stwo aplikacji. To nie odnosi si\u0119 do infrastruktury ani do bezpiecze\u0144stwa sieci, a konkretnie do tego, co piszemy i nad czym pracuj\u0105 programi\u015bci - to niedoci\u0105gni\u0119cia i luki samej aplikacji.<\/p>\n<p>Kierunek <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/ru-ru\/ef\/ef6\/modeling\/designer\/advanced\/edmx\/ssdl-spec\">SDL lub SDLC<\/a><\/noindex>\u00a0\u2014 <b>Cykl \u017cycia rozwoju bezpiecze\u0144stwa<\/b>\u00a0zosta\u0142 opracowany przez firm\u0119 Microsoft. Na schemacie - kanoniczny model SDLC, kt\u00f3rego g\u0142\u00f3wnym celem jest uczestnictwo bezpiecze\u0144stwa na ka\u017cdym etapie rozwoju, od wymaga\u0144 po wydanie i wyj\u015bcie na produkcj\u0119. W Microsoft uznano, \u017ce w produkcie jest zbyt wiele b\u0142\u0119d\u00f3w, ich liczba ro\u015bnie i trzeba co\u015b z tym zrobi\u0107, i zaproponowano to podej\u015bcie, kt\u00f3re sta\u0142o si\u0119 kanoniczne.<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/466773b9a5bd355419fa1d6d1ddbca66.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBezpiecze\u0144stwo aplikacji i SSDL nie maj\u0105 na celu wykrywania luk, jak si\u0119 powszechnie s\u0105dzi, ale zapobieganie ich powstawaniu. Z biegiem czasu kanoniczne podej\u015bcie Microsoftu zosta\u0142o ulepszone, rozwini\u0119te, wprowadzono w nim g\u0142\u0119bsze, bardziej szczeg\u00f3\u0142owe zanurzenie.<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/58d3e6aadd30594c018940bcb2a8248b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKanoniczny SDLC jest szczeg\u00f3\u0142owo opisany w r\u00f3\u017cnych metodologiach - OpenSAMM, BSIMM, OWASP. Metodologie r\u00f3\u017cni\u0105 si\u0119, ale w zasadzie s\u0105 podobne.<\/p>\n<h3>Model Dojrzewania Bezpiecze\u0144stwa<\/h3>\n<p>\nNajbardziej przemawia do mnie <b>BSIMM<\/b>\u00a0\u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bsimm.com\/\">Model Dojrzewania Bezpiecze\u0144stwa<\/a><\/noindex>. Podstaw\u0105 metodologii jest podzia\u0142 procesu bezpiecze\u0144stwa aplikacji na 4 domeny: Governance, Intelligence, SSDL Touchpoints oraz Deployment. W ka\u017cdej domenie znajduje si\u0119 12 praktyk, kt\u00f3re s\u0105 przedstawione w formie 112 aktywno\u015bci.<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/ae0bbfd0dde335af886282672ed92367.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKa\u017cda z 112 aktywno\u015bci ma <b>3 poziomy dojrza\u0142o\u015bci<\/b>: podstawowy, \u015brodkowy i zaawansowany. Wszystkie 12 praktyk mo\u017cna studiowa\u0107 w sekcjach, wybieraj\u0105c wa\u017cne dla siebie elementy, zrozumie\u0107, jak je wdra\u017ca\u0107 i stopniowo dodawa\u0107 elementy, takie jak statyczna i dynamiczna analiza kodu lub przegl\u0105d kodu. Tworzy si\u0119 plan i spokojnie pracuje w ramach wdra\u017cania wybranych aktywno\u015bci.<\/p>\n<h2>Dlaczego DevSecOps<\/h2>\n<p><\/p>\n<blockquote><p>DevOps to og\u00f3lny, du\u017cy proces, w kt\u00f3rym nale\u017cy dba\u0107 o bezpiecze\u0144stwo.<\/p><\/blockquote>\n<p>\nPocz\u0105tkowo <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/DevOps\"><b>DevOps<\/b><\/a><\/noindex> zak\u0142ada\u0142 sprawdzanie bezpiecze\u0144stwa. W praktyce liczba zespo\u0142\u00f3w odpowiedzialnych za bezpiecze\u0144stwo by\u0142a znacznie mniejsza ni\u017c obecnie, a one uczestniczy\u0142y nie jako uczestnicy procesu, lecz jako organ kontrolny i nadzorczy, kt\u00f3ry stawia wymagania i sprawdza jako\u015b\u0107 produktu na ko\u0144cu wydania. To klasyczne podej\u015bcie, w kt\u00f3rym zespo\u0142y bezpiecze\u0144stwa by\u0142y oddzielone od rozwoju i nie bra\u0142y udzia\u0142u w procesie.<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/1c5958fb123313308bdd92c5471c44da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nG\u0142\u00f3wnym problemem jest to, \u017ce IIB s\u0105 oddzielone od rozwoju. Zwykle to jaki\u015b kontur IIB i w nim 2-3 du\u017cych i kosztownych narz\u0119dzi. Co p\u00f3\u0142 roku przybywa kod \u017ar\u00f3d\u0142owy lub aplikacja, kt\u00f3ra musi by\u0107 sprawdzona, a raz w roku przeprowadzane s\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%98%D1%81%D0%BF%D1%8B%D1%82%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%BD%D0%BE%D0%B2%D0%B5%D0%BD%D0%B8%D0%B5\">pentestowanie<\/a><\/noindex>. To wszystko prowadzi do wyd\u0142u\u017cenia termin\u00f3w wprowadzenia na rynek, a dla dewelopera pojawia si\u0119 ogromna ilo\u015b\u0107 podatno\u015bci z automatycznych narz\u0119dzi. Wszystko to jest niemo\u017cliwe do roz\u0142o\u017cenia i naprawienia, poniewa\u017c jeszcze przez ostatnie p\u00f3\u0142 roku nie przeanalizowano wynik\u00f3w, a tutaj nadchodzi nowa partia.<\/p>\n<p>W trakcie pracy naszej firmy widzimy, \u017ce bezpiecze\u0144stwo w r\u00f3\u017cnych obszarach i bran\u017cach rozumie, \u017ce nadszed\u0142 czas, aby nad\u0105\u017cy\u0107 i wsp\u00f3\u0142pracowa\u0107 z rozwojem w jednej p\u0142aszczy\u017anie - w\u00a0<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%93%D0%B8%D0%B1%D0%BA%D0%B0%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8\"><b>Agile<\/b><\/a><\/noindex>. Paradigma DevSecOps doskonale wpisuje si\u0119 w metodologi\u0119 zwinnego podej\u015bcia, wprowadzania, wsparcia oraz udzia\u0142u w ka\u017cdym wydaniu i iteracji.<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/cf258bd7efc82ff27787b5029cf2f945.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Przej\u015bcie do DevSecOps<\/h2>\n<p>\nNajwa\u017cniejsze s\u0142owo w cyklu \u017cycia bezpiecze\u0144stwa aplikacji to <b>\"proces\"<\/b>Musisz to zrozumie\u0107, zanim pomy\u015blisz o zakupie narz\u0119dzi.<\/p>\n<blockquote><p>Samo w\u0142\u0105czenie narz\u0119dzi w proces DevOps nie wystarczy \u2013 wa\u017cna jest interakcja i zrozumienie pomi\u0119dzy uczestnikami procesu.<\/p><\/blockquote>\n<p><\/p>\n<h3>Bardziej licz\u0105 si\u0119 ludzie, a nie narz\u0119dzia.<\/h3>\n<p>\nCz\u0119sto planowanie procesu bezpiecznego rozwoju zaczyna si\u0119 od wyboru i zakupu narz\u0119dzia, a ko\u0144czy pr\u00f3bami zintegrowania narz\u0119dzia w obecnym procesie, kt\u00f3re pozostaj\u0105 jedynie pr\u00f3bami. To prowadzi do smutnych konsekwencji, poniewa\u017c ka\u017cde narz\u0119dzie ma swoje cechy i ograniczenia.<\/p>\n<p>Cz\u0119sto zdarza si\u0119, \u017ce dzia\u0142 bezpiecze\u0144stwa wybiera dobre, drogie narz\u0119dzie z szerokimi mo\u017cliwo\u015bciami i przychodzi do programist\u00f3w, aby wkomponowa\u0107 je w proces. Ale nie da si\u0119 \u2013 proces jest zbudowany w ten spos\u00f3b, \u017ce ograniczenia ju\u017c zakupionego narz\u0119dzia nie pasuj\u0105 do obecnej paradygmy.<\/p>\n<blockquote><p>Najpierw opisz, jaki wynik chcesz osi\u0105gn\u0105\u0107 i jak ma wygl\u0105da\u0107 proces. To pomo\u017ce zrozumie\u0107 role narz\u0119dzia i bezpiecze\u0144stwa w procesie.<\/p><\/blockquote>\n<p><\/p>\n<h3>Zacznij od tego, co ju\u017c jest u\u017cywane.<\/h3>\n<p>\nZanim kupisz drogie narz\u0119dzia, sprawd\u017a, co ju\u017c masz. W ka\u017cdej firmie istniej\u0105 wymagania dotycz\u0105ce bezpiecze\u0144stwa, kt\u00f3re s\u0105 stawiane przed rozwojem, s\u0105 kontrole, testy penetracyjne \u2013 dlaczego nie przekszta\u0142ci\u0107 tego wszystkiego w zrozumia\u0142y i wygodny dla wszystkich format?<\/p>\n<p>Zwykle wymagania to papierowy dokument, kt\u00f3ry le\u017cy na p\u00f3\u0142ce. By\u0142 przypadek, kiedy przyje\u017cd\u017cali\u015bmy do firmy, aby obejrze\u0107 procesy i prosili\u015bmy o pokazanie wymaga\u0144 dotycz\u0105cych bezpiecze\u0144stwa oprogramowania. Specjalista, kt\u00f3ry si\u0119 tym zajmowa\u0142, d\u0142ugo szuka\u0142:<\/p>\n<p><i>\u2013 Gdzie\u015b teraz w notatkach by\u0142 \u015blad, gdzie le\u017cy ten dokument.<\/i><\/p>\n<p>W rezultacie otrzymali\u015bmy dokument po tygodniu.<\/p>\n<p>Dla wymaga\u0144, kontroli i innych utw\u00f3rz stron\u0119, na przyk\u0142ad na\u00a0<b>Confluence<\/b>\u00a0\u2013 to wygodne dla wszystkich.<\/p>\n<blockquote><p>Pro\u015bciej jest przekszta\u0142ci\u0107 to, co ju\u017c istnieje, i wykorzysta\u0107 jako punkt wyj\u015bcia.<\/p><\/blockquote>\n<p><\/p>\n<h3>U\u017cywaj Security Champions. <\/h3>\n<p>\nZwykle w \u015bredniej firmie na 100-200 programist\u00f3w pracuje jeden specjalista ds. bezpiecze\u0144stwa, kt\u00f3ry pe\u0142ni kilka funkcji i fizycznie nie jest w stanie wszystkiego sprawdzi\u0107. Nawet je\u017celi stara si\u0119 z ca\u0142ych si\u0142 \u2013 nie jest w stanie samodzielnie sprawdzi\u0107 ca\u0142ego kodu, kt\u00f3ry generuje rozw\u00f3j. Dla takich przypadk\u00f3w opracowano koncepcj\u0119 \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.owasp.org\/index.php\/Security_Champions\"><b>Security Champions<\/b><\/a><\/noindex>.<\/p>\n<blockquote><p>Security Champions to osoba w zespole deweloperskim, kt\u00f3ra jest zainteresowana bezpiecze\u0144stwem twojego produktu.<\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/c67728db4a6e34407da199387eba2bb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSecurity Champion to punkt kontaktowy w zespole deweloperskim oraz ewangelista bezpiecze\u0144stwa w jednej osobie.<\/p>\n<p>Zwykle, gdy do zespo\u0142u deweloperskiego przychodzi specjalista ds. bezpiecze\u0144stwa i wskazuje na b\u0142\u0105d w kodzie, otrzymuje zdziwion\u0105 odpowied\u017a:<\/p>\n<p><i>\u2014 A kim ty jeste\u015b? Widz\u0119 ci\u0119 po raz pierwszy. U mnie wszystko dobrze \u2013 m\u00f3j starszy kolega podczas przegl\u0105du kodu da\u0142 mi \u00abapply\u00bb, idziemy dalej!<\/i><\/p>\n<p>To typowa sytuacja, poniewa\u017c do starszych lub po prostu koleg\u00f3w z zespo\u0142u, z kt\u00f3rymi deweloper cz\u0119sto wsp\u00f3\u0142pracuje i przeprowadza przegl\u0105dy kodu, jest znacznie wi\u0119ksze zaufanie. Je\u015bli zamiast specjalisty ds. bezpiecze\u0144stwa na b\u0142\u0105d i konsekwencje wska\u017ce Security Champion, jego s\u0142owo b\u0119dzie mia\u0142o wi\u0119ksz\u0105 moc.<\/p>\n<p>Deweloperzy lepiej znaj\u0105 sw\u00f3j kod ni\u017c jakikolwiek specjalista ds. bezpiecze\u0144stwa. Osobie, kt\u00f3ra ma w narz\u0119dziu analizy statycznej co najmniej 5 projekt\u00f3w, zazwyczaj trudno jest zapami\u0119ta\u0107 wszystkie szczeg\u00f3\u0142y. Security Champions znaj\u0105 sw\u00f3j produkt: co z czym wsp\u00f3\u0142dzia\u0142a i na co zwraca\u0107 uwag\u0119 w pierwszej kolejno\u015bci \u2013 s\u0105 efektywniejsi.<\/p>\n<p>Zastan\u00f3w si\u0119 nad wprowadzeniem Security Champions i zwi\u0119kszeniem wp\u0142ywu zespo\u0142u bezpiecze\u0144stwa. Dla samego mistrza jest to r\u00f3wnie\u017c korzystne: rozw\u00f3j zawodowy w nowym obszarze, poszerzenie horyzont\u00f3w technicznych, rozw\u00f3j umiej\u0119tno\u015bci technicznych, zarz\u0105dzaj\u0105cych i przyw\u00f3dczych, zwi\u0119kszenie warto\u015bci rynkowej. To pewien element in\u017cynierii spo\u0142ecznej, twoje \u00aboczy\u00bb w zespole deweloperskim.<\/p>\n<h2>Etapy testowania<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD_%D0%9F%D0%B0%D1%80%D0%B5%D1%82%D0%BE\">Paradigma 20 na 80<\/a><\/noindex>\u00a0m\u00f3wi, \u017ce 20% wysi\u0142k\u00f3w daje 80% rezultatu. Te 20% to praktyki analizy aplikacji, kt\u00f3re mo\u017cna i nale\u017cy automatyzowa\u0107. Przyk\u0142ady takich aktywno\u015bci to analiza statyczna \u2013 <b>SAST<\/b>, analiza dynamiczna \u2013 <b>DAST,<\/b> i\u00a0<b>kontrola Open Source<\/b>. Opowiem wi\u0119cej o aktywno\u015bciach, a tak\u017ce o narz\u0119dziach, z jakimi cechami zwykle si\u0119 spotykamy przy ich wdra\u017caniu w proces oraz jak robi\u0107 to poprawnie.<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/db720e0879cdd1ed818461ffb5f927da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>G\u0142\u00f3wne problemy narz\u0119dzi<\/h3>\n<p>\nWska\u017a\u0119 istotne problemy, kt\u00f3re dotycz\u0105 wszystkich narz\u0119dzi i wymagaj\u0105 uwagi. Zajm\u0119 si\u0119 nimi szczeg\u00f3\u0142owo, aby nie powtarza\u0107 si\u0119 dalej.<\/p>\n<p><b>D\u0142ugi czas analizy. <\/b>Je\u015bli od commit do wydania na produkcj\u0119 zajmuje 30 minut na wszystkie testy i budow\u0119, to kontrole z zakresu bezpiecze\u0144stwa informacji zajm\u0105 ca\u0142\u0105 dob\u0119. Nikt nie b\u0119dzie spowalnia\u0142 procesu. We\u017acie pod uwag\u0119 t\u0119 cech\u0119 i wyci\u0105gnijcie wnioski.<\/p>\n<p><b>Wysoki poziom False Negative lub False Positive. <\/b>Wszystkie produkty s\u0105 r\u00f3\u017cne, wszystkie wykorzystuj\u0105 r\u00f3\u017cne frameworki i maj\u0105 sw\u00f3j w\u0142asny styl pisania kodu. Na r\u00f3\u017cnych bazach kodu i technologiach narz\u0119dzia mog\u0105 pokazywa\u0107 r\u00f3\u017cny poziom False Negative i False Positive. Dlatego zwr\u00f3\u0107cie uwag\u0119 na to, co dok\u0142adnie w\u00a0<b>waszej<\/b> firmie i dla <b>waszych<\/b> aplikacji b\u0119dzie pokazywa\u0107 dobry i wiarygodny wynik.<\/p>\n<p><b>Brak integracji z istniej\u0105cymi narz\u0119dziami<\/b>. Patrzcie na narz\u0119dzia z punktu widzenia integracji, z tym, co ju\u017c u\u017cywacie. Na przyk\u0142ad, je\u015bli macie Jenkins lub TeamCity - sprawd\u017acie integracj\u0119 narz\u0119dzi z tym oprogramowaniem, a nie z GitLab CI, kt\u00f3rego nie u\u017cywacie.<\/p>\n<p><b>Brak lub nadmierna z\u0142o\u017cono\u015b\u0107 dostosowywania. <\/b>Je\u015bli narz\u0119dzie nie ma API, to po co jest potrzebne? Wszystko, co mo\u017cna zrobi\u0107 w interfejsie, powinno by\u0107 dost\u0119pne przez API. W idealnym przypadku narz\u0119dzie powinno mie\u0107 mo\u017cliwo\u015b\u0107 dostosowywania kontroli.<\/p>\n<p><b>Brak mapy rozwoju produktu. <\/b>Rozw\u00f3j nie stoi w miejscu, zawsze korzystamy z nowych framework\u00f3w i funkcji, przepisujemy stary kod na nowe j\u0119zyki. Chcemy by\u0107 pewni, \u017ce narz\u0119dzie, kt\u00f3re kupimy, b\u0119dzie wspiera\u0107 nowe frameworki i technologie. Dlatego wa\u017cne jest, aby wiedzie\u0107, \u017ce produkt ma realn\u0105 i odpowiedni\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B4%D0%BE%D1%80%D0%BE%D0%B6%D0%BD%D0%B0%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0\">map\u0119<\/a><\/noindex> rozwoju.<\/p>\n<h3>Cechy procesu<\/h3>\n<p>\nOpr\u00f3cz cech narz\u0119dzi, bierzcie pod uwag\u0119 r\u00f3wnie\u017c cechy procesu tworzenia. Na przyk\u0142ad, przeszkadzanie w tworzeniu to typowy b\u0142\u0105d. Zobaczmy, jakie jeszcze cechy nale\u017cy uwzgl\u0119dni\u0107 i na co zwr\u00f3ci\u0107 uwag\u0119 zespo\u0142owi bezpiecze\u0144stwa.<\/p>\n<p>Aby nie op\u00f3\u017ania\u0107 termin\u00f3w tworzenia i wydania, stw\u00f3rzcie <b>r\u00f3\u017cne zasady<\/b> i r\u00f3\u017cne <b>show stoppers\u00a0<\/b>\u2014 kryteria wstrzymania procesu budowy w przypadku wyst\u0105pienia luk \u2014 <b>dla r\u00f3\u017cnych \u015brodowisk.<\/b>Na przyk\u0142ad rozumiemy, \u017ce obecna ga\u0142\u0105\u017a idzie na \u015brodowisko deweloperskie lub UAT, wi\u0119c nie zatrzymujemy si\u0119 i nie m\u00f3wimy:<\/p>\n<p><i>\u2014 Macie tutaj luki, nie przejdziecie dalej!<\/i><\/p>\n<p>Na tym etapie wa\u017cne jest, aby powiedzie\u0107 deweloperom, \u017ce s\u0105 problemy bezpiecze\u0144stwa, na kt\u00f3re warto zwr\u00f3ci\u0107 uwag\u0119.<\/p>\n<p><b>Obecno\u015b\u0107 luk w zabezpieczeniach nie jest przeszkod\u0105 dla dalszego testowania<\/b>: r\u0119cznego, integracyjnego lub manualnego. Z drugiej strony, musimy jako\u015b podnie\u015b\u0107 bezpiecze\u0144stwo produktu, wi\u0119c aby programi\u015bci nie zbagatelizowali tego, co znajduje bezpiecze\u0144stwo. Dlatego czasami robimy tak: na stoisku, kiedy produkt trafia na \u015brodowisko deweloperskie, po prostu informujemy zesp\u00f3\u0142 deweloperski:<\/p>\n<p><i>\u2014 Ch\u0142opaki, macie problemy, prosz\u0119 zwr\u00f3\u0107cie na nie uwag\u0119.<\/i><\/p>\n<p>Na etapie UAT znowu pokazujemy ostrze\u017cenia o lukach, a na etapie wydania do produkcji m\u00f3wimy:<\/p>\n<p><i>\u2014 Ch\u0142opaki, kilka razy was ostrzegali\u015bmy, nie zrobili\u015bcie nic \u2014 z tym nie wypu\u015bcimy was.<\/i><\/p>\n<p>Je\u015bli m\u00f3wimy o kodzie i dynamice, nale\u017cy pokazywa\u0107 i ostrzega\u0107 o lukach tylko w tych funkcjach i kodzie, kt\u00f3ry zosta\u0142 napisany dopiero w tej funkcji. \u0415\u0441\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u043d\u0443\u043b \u043a\u043d\u043e\u043f\u043e\u0447\u043a\u0443 \u043d\u0430 3 \u043f\u0438\u043a\u0441\u0435\u043b\u044f i m\u00f3wimy mu, \u017ce ma tam SQL-iniekcj\u0119 i \u017ce musi to szybko poprawi\u0107 \u2014 to jest nieprawid\u0142owe. Patrzcie tylko na to, co zosta\u0142o napisane teraz, i na to, co si\u0119 zmienia w aplikacji.<\/p>\n<p>Powiedzmy, \u017ce mamy jak\u0105\u015b funkcjonaln\u0105 usterk\u0119 \u2014 to, jak aplikacja nie powinna dzia\u0142a\u0107: pieni\u0105dze nie s\u0105 przekazywane, klikaj\u0105c przycisk nie przechodzi na nast\u0119pna stron\u0119 lub towar si\u0119 nie \u0142aduje. <b>Usterki bezpiecze\u0144stwa<\/b>\u00a0\u2014 to takie same usterki, ale nie w kontek\u015bcie dzia\u0142ania aplikacji, a bezpiecze\u0144stwa. <\/p>\n<blockquote><p>Nie wszystkie problemy jako\u015bci oprogramowania to problemy bezpiecze\u0144stwa. Ale wszystkie problemy bezpiecze\u0144stwa s\u0105 powi\u0105zane z jako\u015bci\u0105 oprogramowania. Sherif Mansour, Expedia.<\/p><\/blockquote>\n<p>\nPoniewa\u017c wszystkie luki s\u0105 takimi samymi usterkami, powinny by\u0107 traktowane tam samo, gdzie wszystkie usterki rozwojowe. Zapomnijcie o raportach i strasznych PDF-ach, kt\u00f3rych nikt nie czyta.<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/e54e64658a3882bdc68a48c6ef426746.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKiedy pracowa\u0142em w firmie zajmuj\u0105cej si\u0119 rozwojem, przyszed\u0142 do mnie raport z narz\u0119dzi statycznej analizy. Otworzy\u0142em go, przestraszy\u0142em si\u0119, zrobi\u0142em kaw\u0119, przeszed\u0142em przez 350 stron, zamkn\u0105\u0142em i wr\u00f3ci\u0142em do pracy. <b>Du\u017ce raporty to martwe raporty<\/b>. Zwykle nigdzie nie trafiaj\u0105, e-maile s\u0105 usuwane, zapominane, gubione lub biznes m\u00f3wi, \u017ce akceptuje ryzyko.<\/p>\n<p>Co robi\u0107? Potwierdzone defekty, kt\u00f3re znale\u017ali\u015bmy, po prostu przekszta\u0142camy w wygodniejszy do opracowania format, na przyk\u0142ad umieszczamy w backlogu w Jira. Priorytetyzujemy defekty i usuwamy je w kolejno\u015bci priorytetu, na r\u00f3wni z defektami funkcjonalnymi i defektami test\u00f3w.<\/p>\n<h2>Analiza statyczna \u2014 SAST<\/h2>\n<p>\n<b>To analiza kodu pod k\u0105tem luk w zabezpieczeniach<\/b>, ale to nie to samo, co SonarQube. Sprawdzamy nie tylko na podstawie wzorc\u00f3w lub stylu. W analizie stosowane s\u0105 r\u00f3\u017cne podej\u015bcia: wed\u0142ug drzewa luk w zabezpieczeniach, wed\u0142ug\u00a0<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85\">DataFlow<\/a><\/noindex>, wed\u0142ug analizy plik\u00f3w konfiguracyjnych. To wszystko, co dotyczy bezpo\u015brednio kodu.<\/p>\n<p><b>Zalety podej\u015bcia<\/b>: <b>wykrywanie luk w zabezpieczeniach w kodzie na wczesnym etapie rozwoju<\/b>, kiedy jeszcze nie ma \u015brodowiska testowego ani gotowego narz\u0119dzia, i<b>\u00a0mo\u017cliwo\u015b\u0107 inkrementacyjnego skanowania<\/b>: skanowanie zmienionej cz\u0119\u015bci kodu oraz tylko tej funkcjonalno\u015bci, kt\u00f3r\u0105 aktualnie przygotowujemy, co skraca czas skanowania.<\/p>\n<p><b>Minusy<\/b>\u00a0\u2014 to brak wsparcia dla potrzebnych j\u0119zyk\u00f3w.<\/p>\n<p><b>Potrzebne integracje, <\/b>kt\u00f3re powinny by\u0107 w narz\u0119dziach, moim subiektywnym zdaniem:<\/p>\n<ul>\n<li>Narz\u0119dzie do integracji: Jenkins, TeamCity i Gitlab CI.\n<\/li>\n<li>\u015arodowisko programistyczne: Intellij IDEA, Visual Studio. Programi\u015bcie \u0142atwiej nie grzeba\u0107 w niezrozumia\u0142ym interfejsie, kt\u00f3ry jeszcze trzeba zapami\u0119ta\u0107, tylko bezpo\u015brednio w jego w\u0142asnym \u015brodowisku deweloperskim widzie\u0107 wszystkie potrzebne integracje i luki, kt\u00f3re znalaz\u0142.\n<\/li>\n<li>Przegl\u0105d kodu: SonarQube i r\u0119czne przegl\u0105danie.\n<\/li>\n<li>Trackery defekt\u00f3w: Jira i Bugzilla.\n<\/li>\n<\/ul>\n<p>\nNa obrazku przedstawiono kilku najlepszych przedstawicieli analizy statycznej.<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/bab3420874ac090d4d107edb0d2b857b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWa\u017cne s\u0105 nie narz\u0119dzia, a proces, dlatego istniej\u0105 rozwi\u0105zania open source, kt\u00f3re r\u00f3wnie\u017c dobrze nadaj\u0105 si\u0119 do wypr\u00f3bowania procesu.<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/4f2c278922c291b15922bc5748f87dc3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSAST Open Source nie znajd\u0105 ogromnej liczby luk w zabezpieczeniach ani skomplikowanych DataFlow, ale przy budowaniu procesu mo\u017cna i nale\u017cy je wykorzysta\u0107. Pomagaj\u0105 zrozumie\u0107, jak b\u0119dzie zbudowany proces, kto b\u0119dzie odpowiada\u0142 za b\u0142\u0119dy, kto je zg\u0142asza, kto \u2014 raportuje. Je\u015bli chcesz przeprowadzi\u0107 pocz\u0105tkowy etap budowania bezpiecze\u0144stwa swojego kodu \u2014 u\u017cyj rozwi\u0105za\u0144 open source.<\/p>\n<p>Jak mo\u017cna to zintegrowa\u0107, je\u015bli jeste\u015b na pocz\u0105tku drogi, nie masz nic: ani CI, ani Jenkins, ani TeamCity? Rozwa\u017cmy integracje w procesie.<\/p>\n<h3>Integracja na poziomie CVS<\/h3>\n<p>\nJe\u015bli masz Bitbucket lub GitLab, mo\u017cna przeprowadzi\u0107 integracj\u0119 na poziomie <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/CVS\">Concurrent Versions System<\/a><\/noindex>.<\/p>\n<p><b>Na zdarzenie<\/b>\u00a0\u2014 pull request, commit. Skanujesz kod i w statusie budowy pokazujesz, czy sprawdzenie bezpiecze\u0144stwa przesz\u0142o, czy nie.<\/p>\n<p><b>Opinie. <\/b>Oczywi\u015bcie, opinie s\u0105 zawsze potrzebne. Je\u015bli po prostu wykona\u0142e\u015b prac\u0119 po stronie bezpiecze\u0144stwa, schowa\u0142e\u015b j\u0105 do pude\u0142ka i nikomu o tym nie powiedzia\u0142e\u015b, a potem na koniec miesi\u0105ca wypu\u015bci\u0142e\u015b mn\u00f3stwo b\u0142\u0119d\u00f3w \u2014 to nie jest w porz\u0105dku i nie jest dobrze.<\/p>\n<h3>Integracja z systemem przegl\u0105du kodu<\/h3>\n<p>\nPewnego razu w wa\u017cnych projektach ustawili\u015bmy domy\u015blnego recenzenta na u\u017cytkownika technicznego AppSec. W zale\u017cno\u015bci od tego, czy w nowym kodzie wykryto b\u0142\u0119dy, czy nie, na pull request recenzent ustawia status na \u201eakceptuj\u201d lub \u201ewymaga pracy\u201d \u2014 albo wszystko OK, albo trzeba poprawi\u0107 z linkami do tego, co konkretnie poprawi\u0107. Na integracj\u0119 z wersj\u0105, kt\u00f3ra trafia do produkcji, w\u0142\u0105czyli\u015bmy zakaz scalania, je\u015bli test z bezpiecze\u0144stwa nie zosta\u0142 zaliczony. W\u0142\u0105czali\u015bmy to w r\u0119cznym przegl\u0105dzie kodu, a inni uczestnicy procesu widzieli statusy bezpiecze\u0144stwa w\u0142a\u015bnie dla tego konkretnego procesu.<\/p>\n<h3>Integracja z SonarQube<\/h3>\n<p>\nWielu ma <noindex><a rel=\"nofollow\" href=\"https:\/\/de.wikipedia.org\/wiki\/Quality_Gate\">bramk\u0119 jako\u015bci<\/a><\/noindex> dla jako\u015bci kodu. Tutaj jest to samo \u2014 mo\u017cna zrobi\u0107 te same bramki tylko dla narz\u0119dzi SAST. B\u0119dzie to samo interfejs, ta sama bramka jako\u015bci, tylko b\u0119dzie si\u0119 nazywa\u0142a <b>bramka bezpiecze\u0144stwa<\/b>. I tak, je\u015bli masz proces z wykorzystaniem SonarQube, mo\u017cna to spokojnie wszystko zintegrowa\u0107.<\/p>\n<h3>Integracja na poziomie CI<\/h3>\n<p>\nTutaj te\u017c wszystko jest do\u015b\u0107 proste:<\/p>\n<ul>\n<li><b>Na jednym poziomie z testami automatycznymi<\/b>, testami jednostkowymi.\n<\/li>\n<li><b>Podzia\u0142 na etapy rozwoju<\/b>: dev, test, prod. Mog\u0105 by\u0107 w\u0142\u0105czane r\u00f3\u017cne zestawy regu\u0142, lub r\u00f3\u017cne warunki niepowodzenia: zatrzymujemy budow\u0119, nie zatrzymujemy budowy.\n<\/li>\n<li><b>Synchronizacja\/asynchronizacja uruchamiania<\/b>. Czekamy na zako\u0144czenie test\u00f3w bezpiecze\u0144stwa lub nie czekamy. To znaczy, po prostu je uruchamiamy i idziemy dalej, a potem przychodzi nam status, \u017ce wszystko jest dobrze lub \u017ale.\n<\/li>\n<\/ul>\n<p>\nTo wszystko w idealnym r\u00f3\u017cowym \u015bwiecie. W rzeczywisto\u015bci takiego nie ma, ale d\u0105\u017cymy do tego. Wynik przeprowadzonych test\u00f3w bezpiecze\u0144stwa powinien by\u0107 analogiczny do wynik\u00f3w test\u00f3w jednostkowych.<\/p>\n<p>Na przyk\u0142ad wzi\u0119li\u015bmy du\u017cy projekt i zdecydowali\u015bmy, \u017ce teraz b\u0119dziemy skanowa\u0107 go SAST-em - OK. Wrzucili\u015bmy ten projekt do SAST, on pokaza\u0142 nam 20 000 podatno\u015bci i w ramach decyzji podj\u0119li\u015bmy, \u017ce wszystko jest w porz\u0105dku. 20 000 podatno\u015bci to nasz d\u0142ug techniczny. Umie\u015bcimy d\u0142ug w pude\u0142ku, b\u0119dziemy stopniowo go porz\u0105dkowa\u0107 i zg\u0142asza\u0107 b\u0142\u0119dy w trackerach defekt\u00f3w. Zatrudnimy firm\u0119, zrobimy wszystko sami lub b\u0119d\u0105 nam pomaga\u0107 Security Champions - i nasz d\u0142ug techniczny b\u0119dzie mala\u0142.<\/p>\n<p>A wszystkie nowe pojawiaj\u0105ce si\u0119 podatno\u015bci w nowym kodzie powinny by\u0107 usuwane tak jak b\u0142\u0119dy w testach jednostkowych lub automatycznych. M\u00f3wi\u0105c obrazowo, rozpocz\u0119\u0142a si\u0119 kompilacja, przeszli przez ni\u0105, dwa testy si\u0119 nie powiod\u0142y, a dwa testy bezpiecze\u0144stwa. OK - poszli\u015bmy, zobaczyli\u015bmy, co si\u0119 sta\u0142o, poprawili\u015bmy jedno, poprawili\u015bmy drugie, nast\u0119pnym razem przeszli\u015bmy - wszystko w porz\u0105dku, nie pojawi\u0142y si\u0119 nowe podatno\u015bci, testy nie zawiod\u0142y. Je\u015bli zadanie jest g\u0142\u0119bsze i trzeba je dobrze zrozumie\u0107, lub poprawa podatno\u015bci dotyczy du\u017cej cz\u0119\u015bci tego, co le\u017cy pod mask\u0105: zg\u0142oszono b\u0142\u0105d w trackerze defekt\u00f3w, zostaje on priorytetyzowany i poprawiany. Niestety, \u015bwiat nie jest idealny i testy czasem si\u0119 nie powiod\u0105.<\/p>\n<p>Przyk\u0142ad bramy bezpiecze\u0144stwa - analog bramy jako\u015bci, dotycz\u0105cy obecno\u015bci i liczby podatno\u015bci w kodzie.<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/eb30d3c7988b28c2cb25e9656871ec96.png\" style=\"display:block;margin: 0 auto;\" \/>Integrujemy z SonarQube - plugin jest instalowany, wszystko jest bardzo wygodne i \u015bwietne.<\/p>\n<h3>Integracja z \u015brodowiskiem deweloperskim<\/h3>\n<p>\n<b>Mo\u017cliwo\u015bci integracji:<\/b><\/p>\n<ul>\n<li>Uruchomienie skanowania z \u015brodowiska deweloperskiego jeszcze przed commit.\n<\/li>\n<li>Przegl\u0105danie wynik\u00f3w.\n<\/li>\n<li>Analiza wynik\u00f3w.\n<\/li>\n<li>Synchronizacja z serwerem.\n<\/li>\n<\/ul>\n<p>\nTak mniej wi\u0119cej wygl\u0105da pozyskiwanie wynik\u00f3w z serwera.<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/270d4af76fddc0ceebca908c7d3835b8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW naszym \u015brodowisku deweloperskim <noindex><a rel=\"nofollow\" href=\"https:\/\/www.jetbrains.com\/idea\/\">Intellij IDEA<\/a><\/noindex> pojawia si\u0119 dodatkowy punkt, kt\u00f3ry informuje, \u017ce podczas skanowania znaleziono takie podatno\u015bci. Mo\u017cna od razu poprawia\u0107 kod, ogl\u0105da\u0107 rekomendacje i\u00a0<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Control-flow_graph\">Flow Graph<\/a><\/noindex>. Wszystko jest umieszczone w miejscu pracy dewelopera, co jest bardzo wygodne - nie trzeba chodzi\u0107 po innych linkach i szuka\u0107 czego\u015b dodatkowego.<\/p>\n<h2>Bardzo interesuj\u0105ce, ale ma\u0142o znane narz\u0119dzie. W naszym przypadku za jego pomoc\u0105 uruchomimy Juniper vMX i Cisco xRV9000 na zwyk\u0142ym Ubuntu 20.04 LTS.<\/h2>\n<p>\nTo m\u00f3j ulubiony temat. Wszyscy u\u017cywaj\u0105 bibliotek Open Source - po co pisa\u0107 mas\u0119 obej\u015b\u0107 i rower\u00f3w, gdy mo\u017cna wzi\u0105\u0107 gotow\u0105 bibliotek\u0119, w kt\u00f3rej wszystko jest ju\u017c wdro\u017cone?<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/05b9cd5a8b269af2a3f59931a0774778.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOczywi\u015bcie, tak to jest, ale biblioteki s\u0105 r\u00f3wnie\u017c pisane przez ludzi, zawieraj\u0105 okre\u015blone ryzyka i zawieraj\u0105 r\u00f3wnie\u017c podatno\u015bci, o kt\u00f3rych od czasu do czasu, lub nieustannie, jest mowa. Dlatego istnieje kolejny krok w Bezpiecze\u0144stwie Aplikacji \u2013 to analiza komponent\u00f3w Open Source.<\/p>\n<h3>Analiza Open Source \u2013 OSA<\/h3>\n<p>\nNarz\u0119dzie obejmuje trzy du\u017c\u0105 etapy.<\/p>\n<p><b>Wykrywanie podatno\u015bci w bibliotekach. <\/b>Na przyk\u0142ad, narz\u0119dzie wie, \u017ce u\u017cywamy jakiej\u015b biblioteki, i \u017ce w\u00a0<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Common_Vulnerabilities_and_Exposures\">CVE<\/a><\/noindex> lub w systemie \u015bledzenia b\u0142\u0119d\u00f3w s\u0105 jakie\u015b podatno\u015bci, kt\u00f3re dotycz\u0105 tej wersji biblioteki. Przy pr\u00f3bie jej u\u017cycia, narz\u0119dzie wyda ostrze\u017cenie, \u017ce biblioteka jest podatna i zaleca u\u017cycie innej wersji, w kt\u00f3rej nie ma podatno\u015bci.<\/p>\n<p><b>Analiza czysto\u015bci licencyjnej. <\/b>Na razie nie jest to u nas szczeg\u00f3lnie popularne, ale je\u015bli pracujesz z zagranic\u0105, to mo\u017cna tam czasami otrzyma\u0107 nagan\u0119 za u\u017cycie komponentu z otwartym kodem \u017ar\u00f3d\u0142owym, kt\u00f3rego nie mo\u017cna u\u017cywa\u0107 lub modyfikowa\u0107. Zgodnie z polityk\u0105 licencyjn\u0105 biblioteki, nie mo\u017cemy tego robi\u0107. Albo, je\u015bli j\u0105 zmodyfikowali\u015bmy i u\u017cywamy, musimy udost\u0119pni\u0107 nasz kod. Oczywi\u015bcie, nikt nie chce publikowa\u0107 kodu swoich produkt\u00f3w, ale r\u00f3wnie\u017c mo\u017cna si\u0119 przed tym obroni\u0107.<\/p>\n<p><b>Analiza komponent\u00f3w, kt\u00f3re s\u0105 u\u017cywane w \u015brodowisku przemys\u0142owym. <\/b>Przypu\u015b\u0107my hipotetyczn\u0105 sytuacj\u0119, \u017ce w ko\u0144cu zako\u0144czyli\u015bmy rozw\u00f3j i wydali\u015bmy ostatni\u0105 wersj\u0119 naszego mikrous\u0142ug. On \u017cyje tam wspaniale \u2013 tydzie\u0144, miesi\u0105c, rok. Nie zbieramy go, nie przeprowadzamy kontroli bezpiecze\u0144stwa, wszystko wydaje si\u0119 dobrze. Ale nagle dwa tygodnie po wydaniu pojawia si\u0119 krytyczna podatno\u015b\u0107 w komponencie Open Source, kt\u00f3ry dok\u0142adnie w tej wersji u\u017cywamy w \u015brodowisku przemys\u0142owym. Je\u015bli nie notujemy, co i gdzie u\u017cywamy, to tej podatno\u015bci po prostu nie zobaczymy. W niekt\u00f3rych narz\u0119dziach istnieje mo\u017cliwo\u015b\u0107 monitorowania podatno\u015bci w bibliotekach, kt\u00f3re aktualnie s\u0105 u\u017cywane w przemy\u015ble. To bardzo pomocne.<\/p>\n<p><b>Mo\u017cliwo\u015bci:<\/b><\/p>\n<ul>\n<li>R\u00f3\u017cne polityki dla r\u00f3\u017cnych etap\u00f3w rozwoju.\n<\/li>\n<li>Monitorowanie komponent\u00f3w w \u015brodowisku przemys\u0142owym.\n<\/li>\n<li>Kontrola bibliotek w obr\u0119bie organizacji.\n<\/li>\n<li>Wsparcie dla r\u00f3\u017cnych system\u00f3w budowy i j\u0119zyk\u00f3w.\n<\/li>\n<li>Analiza obraz\u00f3w Docker.\n<\/li>\n<\/ul>\n<p>\nKilka przyk\u0142ad\u00f3w lider\u00f3w w zakresie analizy Open Source.<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/f1b05f86beb4a64f9bf3443963e3603b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJedyny darmowy z nich to <noindex><a rel=\"nofollow\" href=\"https:\/\/www.owasp.org\/index.php\/OWASP_Dependency_Check\">Dependency-Check<\/a><\/noindex> od OWASP. Mo\u017cna go w\u0142\u0105czy\u0107 na wczesnym etapie, aby zobaczy\u0107, jak dzia\u0142a i co obs\u0142uguje. W zasadzie to wszystkie produkty chmurowe lub on-premise, ale z ich baz\u0105 i tak s\u0105 wysy\u0142ane do internetu. Wysy\u0142aj\u0105 nie twoje biblioteki, a hasze lub swoje warto\u015bci, kt\u00f3re obliczaj\u0105, oraz odciski palc\u00f3w do swojego serwera, aby otrzyma\u0107 powiadomienia o istnieniu luk.<\/p>\n<h3>Integracja w procesie<\/h3>\n<p>\n<b>Kontrola bibliotek w perymetrze<\/b>, kt\u00f3re s\u0105 pobierane z zewn\u0119trznych \u017ar\u00f3de\u0142. Mamy zewn\u0119trzne i wewn\u0119trzne repozytoria. Na przyk\u0142ad, wewn\u0105trz Event Central stoi Nexus i chcemy, aby w naszym repozytorium nie by\u0142o luk o statusie \u201ekrytyczny\u201d lub \u201ewysoki\u201d. Mo\u017cna skonfigurowa\u0107 proxy przy u\u017cyciu narz\u0119dzia Nexus Firewall Lifecycle, aby takie luki by\u0142y odrzucane i nie trafia\u0142y do wewn\u0119trznego repozytorium.<\/p>\n<p><b>Integracja w CI<\/b>. Na tym samym poziomie co autotesty, testy jednostkowe i podzia\u0142 na etapy rozwoju: dev, test, prod. Na ka\u017cdym etapie mo\u017cna pobiera\u0107 dowolne biblioteki, u\u017cywa\u0107 czegokolwiek, ale je\u015bli znajduje si\u0119 tam co\u015b powa\u017cnego o statusie \u201ecritical\u201d - by\u0107 mo\u017ce warto, aby programi\u015bci zwr\u00f3cili na to uwag\u0119 na etapie przej\u015bcia do produkcji.<\/p>\n<p><b>Integracja z artefaktoriami<\/b>: Nexus i JFrog.<\/p>\n<p><b>Integracja w \u015brodowisku deweloperskim. <\/b>Narz\u0119dzia, kt\u00f3re wybierasz, powinny mie\u0107 integracj\u0119 ze \u015brodowiskami deweloperskimi. Programista powinien mie\u0107 dost\u0119p do wynik\u00f3w skanowania z jego miejsca pracy lub mo\u017cliwo\u015b\u0107 samodzielnego przeskanowania i sprawdzenia kodu pod k\u0105tem luk przed wprowadzeniem zmian do CVS.<\/p>\n<p><b>Integracja w CD. <\/b>To \u015bwietna funkcja, kt\u00f3ra bardzo mi si\u0119 podoba, o kt\u00f3rej ju\u017c opowiada\u0142em - monitorowanie pojawiania si\u0119 nowych luk w \u015brodowisku przemys\u0142owym. Dzia\u0142a to mniej wi\u0119cej tak.<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/605c638df343db5c47ab36b4dc00f41c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMamy <b>Public Component Repositories<\/b>\u00a0\u2014 pewne narz\u0119dzia z zewn\u0105trz, i nasz wewn\u0119trzny repozytorium. Chcemy, \u017ceby zawiera\u0142o tylko zaufane komponenty. Przy proksowaniu zapytania sprawdzamy, czy pobierana biblioteka nie ma luk w zabezpieczeniach. Je\u015bli pasuje do okre\u015blonych polityk, kt\u00f3re ustalamy i musimy uzgodni\u0107 z dzia\u0142em rozwoju, nie jest pobierana i pojawia si\u0119 komunikat o potrzebie u\u017cycia innej wersji. W zwi\u0105zku z tym, je\u015bli w bibliotece znajduje si\u0119 co\u015b naprawd\u0119 krytycznego i z\u0142ego, to programista nie otrzyma jej na etapie instalacji \u2014 niech u\u017cywa wersji wy\u017cszej lub ni\u017cszej.<\/p>\n<ul>\n<li>Podczas tworzenia builda sprawdzamy, czy nikt nie wstawi\u0142 niczego z\u0142ego, czy wszystkie komponenty s\u0105 bezpieczne i czy nikt nie przyni\u00f3s\u0142 nic niebezpiecznego na pami\u0119ci USB.\n<\/li>\n<li>W naszym repozytorium znajduj\u0105 si\u0119 tylko zaufane komponenty. \n<\/li>\n<li>Podczas wdra\u017cania ponownie sprawdzamy same pakiety: war, jar, DL lub obraz Docker, pod k\u0105tem zgodno\u015bci z polityk\u0105. \n<\/li>\n<li>Podczas przej\u015bcia do produkcji monitorujemy to, co dzieje si\u0119 w \u015brodowisku produkcyjnym: pojawiaj\u0105 si\u0119 lub nie pojawiaj\u0105 krytyczne luki w zabezpieczeniach.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>Analiza dynamiczna \u2014 DAST<\/h2>\n<p>\nNarz\u0119dzia analizy dynamicznej r\u00f3\u017cni\u0105 si\u0119 radykalnie od wszystkiego, co by\u0142o wcze\u015bniej powiedziane. To pewna symulacja pracy u\u017cytkownika z aplikacj\u0105. Je\u015bli to aplikacja internetowa, wysy\u0142amy zapytania, symuluj\u0105c prac\u0119 klienta, klikamy przyciski na froncie, wysy\u0142amy sztuczne dane z formularzy: cudzys\u0142owy, nawiasy, znaki w r\u00f3\u017cnych kodowaniach, aby zobaczy\u0107, jak aplikacja dzia\u0142a i przetwarza zewn\u0119trzne dane.<\/p>\n<p>Ten sam system pozwala sprawdza\u0107 luk w wzorcach w Open Source. Poniewa\u017c DAST nie wie, jakiego Open Source u\u017cywamy, po prostu rzuca \"z\u0142o\u015bliwe\" wzorce i analizuje odpowiedzi serwera:<\/p>\n<p><i>\u2014 Aha, tu jest problem z deserializacj\u0105, a tu nie.<\/i><\/p>\n<p>To wi\u0105\u017ce si\u0119 z du\u017cymi ryzykami, poniewa\u017c je\u015bli przeprowadzasz ten test bezpiecze\u0144stwa na tym samym \u015brodowisku, z kt\u00f3rym pracuj\u0105 testerzy \u2014 mog\u0105 wydarzy\u0107 si\u0119 nieprzyjemne rzeczy.<\/p>\n<ul>\n<li>Wysokie obci\u0105\u017cenie sieci serwera aplikacji.\n<\/li>\n<li>Brak integracji.\n<\/li>\n<li>Mo\u017cliwo\u015b\u0107 zmiany ustawie\u0144 analizowanej aplikacji.\n<\/li>\n<li>Brak wsparcia dla niezb\u0119dnych technologii.\n<\/li>\n<li>Z\u0142o\u017cono\u015b\u0107 konfiguracji.\n<\/li>\n<\/ul>\n<p>\nMieli\u015bmy sytuacj\u0119, w kt\u00f3rej w ko\u0144cu uruchomili\u015bmy AppScan: d\u0142ugo uzyskiwali\u015bmy dost\u0119p do aplikacji, dostali\u015bmy 3 konta i cieszyli\u015bmy si\u0119 - w ko\u0144cu wszystko sprawdzimy! Uruchomili\u015bmy skanowanie, a pierwsze, co zrobi\u0142 AppScan - wszed\u0142 do panelu administracyjnego, przycisn\u0105\u0142 wszystkie przyciski, zmieni\u0142 po\u0142ow\u0119 danych, a potem ca\u0142kowicie zabi\u0142 serwer swoimi <noindex><a rel=\"nofollow\" href=\"https:\/\/www.mailform.io\/\">mailform<\/a><\/noindex>-zapytaniami. Rozw\u00f3j i testowanie powiedzia\u0142y:<\/p>\n<p><i>\u2014 Ch\u0142opaki, \u017ce wy sobie \u017cartujecie?! Dali\u015bmy wam konta, a wy po\u0142o\u017cyli\u015bcie stand!<\/i><\/p>\n<p>Uwzgl\u0119dnij mo\u017cliwe ryzyka. W idealnym przypadku przygotuj oddzielny stand do testowania bezpiecze\u0144stwa, kt\u00f3ry b\u0119dzie w jaki\u015b spos\u00f3b izolowany od reszty \u015brodowiska, a kontrol\u0119 panelu administracyjnego najlepiej sprawdza\u0107 manualnie. To jest test penetracyjny - te pozosta\u0142e procenty wysi\u0142ku, kt\u00f3re teraz nie bierzemy pod uwag\u0119. <\/p>\n<p>Warto zauwa\u017cy\u0107, \u017ce mo\u017cna to wykorzysta\u0107 jako analogiczne testowanie obci\u0105\u017ceniowe. Na pierwszym etapie mo\u017cna w\u0142\u0105czy\u0107 skaner dynamiczny w 10-15 w\u0105tkach i zobaczy\u0107, co si\u0119 stanie, ale zazwyczaj, jak pokazuje praktyka, nic dobrego.<\/p>\n<p>Kilka zasob\u00f3w, kt\u00f3re zwykle u\u017cywamy.<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/45a25dbe2a2d053e6ed16d31b6ac53ef.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWarto wyr\u00f3\u017cni\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/portswigger.net\/burp\">Burp Suite<\/a><\/noindex>\u00a0\u2014 to \u00abszwajcarski scyzoryk\u00bb dla ka\u017cdego specjalisty ds. bezpiecze\u0144stwa. U\u017cywa go wszyscy i jest bardzo wygodny. W\u0142a\u015bnie ukaza\u0142a si\u0119 nowa wersja demo przedsi\u0119biorstwa. Je\u015bli wcze\u015bniej by\u0142a to po prostu samodzielna aplikacja z wtyczkami, to teraz w ko\u0144cu deweloperzy tworz\u0105 du\u017cy serwer, z kt\u00f3rego b\u0119dzie mo\u017cna zarz\u0105dza\u0107 wieloma agentami. To jest \u015bwietne, polecam spr\u00f3bowa\u0107.<\/p>\n<h3>Integracja w procesie<\/h3>\n<p>\nIntegracja przebiega ca\u0142kiem dobrze i prosto: <b>uruchomienie skanowania po pomy\u015blnej instalacji <\/b>aplikacji na standzie i\u00a0<b>skanowanie po pomy\u015blnym przeprowadzeniu testowania integracyjnego<\/b>.<\/p>\n<p>Je\u015bli integracje nie dzia\u0142aj\u0105 lub s\u0105 tam zatyczki i funkcje mock, to jest to bezsensowne i bezu\u017cyteczne - niezale\u017cnie od tego, jaki wz\u00f3r wy\u015blemy, serwer i tak b\u0119dzie odpowiada\u0142 tak samo.<\/p>\n<ul>\n<li>Idealnie - oddzielny stand do testowania.\n<\/li>\n<li>Przed rozpocz\u0119ciem testowania zapisz sekwencj\u0119 logowania.\n<\/li>\n<li>Testowanie systemu administracyjnego - tylko r\u0119czne.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>Proces<\/h2>\n<p>\nTroch\u0119 og\u00f3lnie o procesie w og\u00f3le i o dzia\u0142aniu ka\u017cdego narz\u0119dzia, w szczeg\u00f3lno\u015bci. Wszystkie aplikacje s\u0105 r\u00f3\u017cne - w jednej lepiej dzia\u0142a analiza dynamiczna, w innej statyczna, w kolejnej analiza OpenSource, testy penetracyjne lub cokolwiek innego, na przyk\u0142ad zdarzenia z\u00a0<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Waf\">Waf<\/a><\/noindex>.<\/p>\n<blockquote><p>Ka\u017cdy proces wymaga kontroli.<\/p><\/blockquote>\n<p>\nAby zrozumie\u0107, jak dzia\u0142a proces i gdzie mo\u017cna go poprawi\u0107, trzeba zbiera\u0107 metryki ze wszystkiego, co da si\u0119 zyska\u0107, w tym metryki produkcyjne, metryki z narz\u0119dzi oraz z tracker\u00f3w defekt\u00f3w.<\/p>\n<p>Jakiekolwiek dane s\u0105 przydatne. Nale\u017cy patrze\u0107 z r\u00f3\u017cnych perspektyw na to, gdzie dany instrument jest lepiej stosowany, gdzie proces konkretnie kuleje. Mo\u017ce warto spojrze\u0107 na czas reakcji zespo\u0142u developerskiego, aby zrozumie\u0107, gdzie poprawi\u0107 proces na podstawie czasu. Im wi\u0119cej danych, tym wi\u0119cej perspektyw mo\u017cna zbudowa\u0107, od poziomu og\u00f3lnego do szczeg\u00f3\u0142\u00f3w ka\u017cdego procesu.<\/p>\n<p><img decoding=\"async\" alt=\"Strach i nienawi\u015b\u0107 DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/93e079b19c4c8189ce6ca4eaec186eed.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPoniewa\u017c wszystkie analizatory statyczne i dynamiczne maj\u0105 swoje API, swoje metody uruchamiania, zasady, jedni maj\u0105 harmonogramy, inni nie \u2014 piszemy narz\u0119dzie <b>AppSec Orkiestrator<\/b>, kt\u00f3re umo\u017cliwia stworzenie jednego punktu wej\u015bcia w ca\u0142y proces z wyrob\u00f3w i zarz\u0105dzanie nim z jednego miejsca.<\/p>\n<p>Menad\u017cerowie, programi\u015bci i in\u017cynierowie bezpiecze\u0144stwa maj\u0105 jeden punkt wej\u015bcia, z kt\u00f3rego mog\u0105 zobaczy\u0107, co zosta\u0142o uruchomione, skonfigurowa\u0107 i rozpocz\u0105\u0107 skanowanie, uzyska\u0107 wyniki skanowania, postawi\u0107 wymagania. Staramy si\u0119 unika\u0107 papierowych dokument\u00f3w, przekszta\u0142caj\u0105c wszystko w j\u0119zyk ludzki, kt\u00f3ry wykorzystuje rozw\u00f3j \u2014 strony w Confluence z statusem i metrykami, defekty w Jira lub w r\u00f3\u017cnych trackerach defekt\u00f3w, lub integracj\u0119 w proces synchronizacyjny\/asynchroniczny w CI\/CD.<\/p>\n<h2>Kluczowe wnioski<\/h2>\n<p>\n<b>Narz\u0119dzia nie s\u0105 najwa\u017cniejsze.<\/b> Najpierw przemy\u015bl proces \u2014 potem wdra\u017caj narz\u0119dzia. Narz\u0119dzia s\u0105 dobre, ale drogie, wi\u0119c mo\u017cna zacz\u0105\u0107 od procesu i ustawi\u0107 wsp\u00f3\u0142prac\u0119 oraz zrozumienie mi\u0119dzy rozwojem a bezpiecze\u0144stwem. Z perspektywy bezpiecze\u0144stwa \u2014 nie trzeba \"zatrzymywa\u0107\" wszystkiego na raz, z perspektywy rozwoju \u2014 je\u015bli co\u015b jest niezwykle krytyczne, to nale\u017cy to naprawi\u0107, a nie zamyka\u0107 na problem oczy.<\/p>\n<p><b>Jako\u015b\u0107 produktu<\/b>\u00a0<b>\u2014 wsp\u00f3lny cel<\/b> zar\u00f3wno bezpiecze\u0144stwa, jak i rozwoju. Wykonujemy t\u0119 sam\u0105 prac\u0119, staraj\u0105c si\u0119, aby wszystko dzia\u0142a\u0142o poprawnie i nie by\u0142o ryzyk reputacyjnych i strat finansowych. Dlatego propagujemy podej\u015bcie do DevSecOps, SecDevOps, aby poprawi\u0107 komunikacj\u0119 i uczyni\u0107 produkt lepszej jako\u015bci.<\/p>\n<p><b>Zacznij od tego, co ju\u017c jest<\/b>: wymagania, architektura, cz\u0119\u015bciowe kontrole, szkolenia, wytyczne. Nie trzeba od razu stosowa\u0107 wszystkich praktyk na wszystkich projektach \u2014 <b>dzia\u0142aj iteracyjnie<\/b>. Nie ma jednego standardu \u2014 <b>eksperymentuj<\/b> i pr\u00f3buj r\u00f3\u017cnych podej\u015b\u0107 i rozwi\u0105za\u0144.<\/p>\n<p><b>Mi\u0119dzy defektami bezpiecze\u0144stwa informacji a defektami funkcjonalnymi istnieje znak r\u00f3wno\u015bci<\/b>.<\/p>\n<p><b>Automatyzuj wszystko<\/b>, co si\u0119 rusza. Wszystko, co nie rusza \u2014 przesu\u0144 i zautomatyzuj. Je\u015bli co\u015b wykonuje si\u0119 r\u0119cznie, to nie jest dobry obszar procesu. Mo\u017ce powinno si\u0119 to przemy\u015ble\u0107 i r\u00f3wnie\u017c zautomatyzowa\u0107.<\/p>\n<p>Je\u015bli zesp\u00f3\u0142 ds. bezpiecze\u0144stwa informacji jest niewielki \u2014 <b>u\u017cywaj Security Champions<\/b>.<\/p>\n<p>Mo\u017cliwe, \u017ce to, o czym m\u00f3wi\u0142em, nie b\u0119dzie dla Ciebie odpowiednie i wymy\u015blisz co\u015b swojego \u2014 i to jest w porz\u0105dku. Ale\u00a0<b>wybierz narz\u0119dzia w oparciu o wymagania swojego procesu<\/b>. Nie patrz na to, co m\u00f3wi spo\u0142eczno\u015b\u0107, \u017ce to narz\u0119dzie jest z\u0142e, a to dobre. Mo\u017ce okaza\u0107 si\u0119, \u017ce w Twoim produkcie jest przewa\u017cnie odwrotnie.<\/p>\n<p><b>Wymagania dotycz\u0105ce narz\u0119dzi.<\/b><\/p>\n<ul>\n<li>Niski poziom fa\u0142szywych alarm\u00f3w.\n<\/li>\n<li>Odpowiedni czas analizy.\n<\/li>\n<li>\u0141atwo\u015b\u0107 u\u017cycia.\n<\/li>\n<li>Dost\u0119pno\u015b\u0107 integracji.\n<\/li>\n<li>Zrozumienie roadmapy rozwoju produktu.\n<\/li>\n<li>Mo\u017cliwo\u015b\u0107 dostosowania narz\u0119dzi.\n<\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p>Prezentacja Jurija zosta\u0142a wybrana jako jedna z najlepszych na DevOpsConf 2018. Aby pozna\u0107 jeszcze wi\u0119cej interesuj\u0105cych pomys\u0142\u00f3w i praktycznych przypadk\u00f3w, przyjd\u017a 27 i 28 maja do Skolkovo na\u00a0<noindex><a rel=\"nofollow\" href=\"https:\/\/devopsconf.io\/moscow-rit\/2019\">DevOpsConf<\/a><\/noindex> w ramach <noindex><a rel=\"nofollow\" href=\"https:\/\/ritfest.ru\/2019\">festiwalu RIT++<\/a><\/noindex>. A jeszcze lepiej, je\u015bli jeste\u015b got\u00f3w dzieli\u0107 si\u0119 swoim do\u015bwiadczeniem, wtedy <noindex><a rel=\"nofollow\" href=\"https:\/\/conf.ontico.ru\/lectures\/propose\/?conference=dc2019-rit\">zg\u0142o\u015b si\u0119<\/a><\/noindex> na prezentacj\u0119 do 21 kwietnia.<\/p><\/blockquote>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/448488\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0423\u00a0\u043d\u0430\u0441 \u0431\u044b\u043b\u043e 2\u00a0\u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043a\u043e\u0434\u0430, 4\u00a0\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u0432\u043e\u0438 \u043f\u043e\u0434\u0435\u043b\u043a\u0438 \u0438\u00a0250\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432. \u041d\u0435\u00a0\u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0432\u0441\u0451 \u0431\u044b\u043b\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u043d\u043e\u00a0\u0440\u0430\u0437 \u043d\u0430\u0447\u0430\u043b \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c DevSecOps, \u0442\u043e \u043d\u0430\u0434\u043e\u00a0\u0438\u0434\u0438 \u0434\u043e\u00a0\u043a\u043e\u043d\u0446\u0430. \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a. \u0410\u0432\u0442\u043e\u0440\u044b \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439: \u0414\u0436\u0430\u0441\u0442\u0438\u043d \u0420\u043e\u0439\u043b\u0430\u043d\u0434 \u0438\u00a0\u0414\u044d\u043d \u0425\u0430\u0440\u043c\u043e\u043d. \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 SecDevOps? \u0410\u00a0DevSecOps? \u0412\u00a0\u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u044f? Application Security\u00a0\u2014 \u043e\u00a0\u0447\u0451\u043c \u044d\u0442\u043e? \u041f\u043e\u0447\u0435\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442? \u041d\u0430\u00a0\u0432\u0441\u0435 \u044d\u0442\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0437\u043d\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u042e\u0440\u0438\u0439 \u0428\u0430\u0431\u0430\u043b\u0438\u043d [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":23720,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-31852","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0423 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e 2 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043a\u043e\u0434\u0430, 4 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u0432\u043e\u0438 \u043f\u043e\u0434\u0435\u043b\u043a\u0438 \u0438 250 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/strah-i-nenavist-devsecops\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0442\u0440\u0430\u0445 \u0438 \u043d\u0435\u043d\u0430\u0432\u0438\u0441\u0442\u044c DevSecOps | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0423 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e 2 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043a\u043e\u0434\u0430, 4 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u0432\u043e\u0438 \u043f\u043e\u0434\u0435\u043b\u043a\u0438 \u0438 250 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/strah-i-nenavist-devsecops\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:43:30+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:43:30+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47 Strach i nienawi\u015b\u0107 DevSecOps | ProHoster","description":"Mieli\u015bmy 2 analizatory kodu, 4 narz\u0119dzia do test\u00f3w dynamicznych, w\u0142asne twory i 250 skrypt\u00f3w.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/strah-i-nenavist-devsecops","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0442\u0440\u0430\u0445 \u0438 \u043d\u0435\u043d\u0430\u0432\u0438\u0441\u0442\u044c DevSecOps | ProHoster","og:description":"\u0423 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e 2 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043a\u043e\u0434\u0430, 4 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u0432\u043e\u0438 \u043f\u043e\u0434\u0435\u043b\u043a\u0438 \u0438 250 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/strah-i-nenavist-devsecops","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:43:30+00:00","article:modified_time":"2019-10-31T18:43:30+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"31852","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 08:08:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:50:34","updated":"2026-01-21 08:08:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/31852","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=31852"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/31852\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/23720"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=31852"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=31852"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=31852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}