Säkerhetspodcasten #186 -Containers
Lyssna
- mp3, längd: 51:13
Innehåll
I dagens avsnitt gräver vi djupt i ämnet containers. Hur fungerar moderna lösningar baserade på kubernetes, docker etc och hur påverkar deras användande säkerheten?
AI transkribering
AI försöker förstå oss… Ha överseende med galna feltranskriberingar.
1 00:00:00,260 --> 00:00:05,800
Hej och välkommen till Säkerhetspodcasten. Jag som pratar heter Johan Ribberg-Möller, med mig har jag Peter Magnusson.
2 00:00:06,380 --> 00:00:07,660
Peter, den vise.
3 00:00:08,300 --> 00:00:09,200
Rickard Woodfors.
4 00:00:09,640 --> 00:00:10,740
I en app-container.
5 00:00:11,380 --> 00:00:12,160
Mattias Idage.
6 00:00:13,420 --> 00:00:14,920
Solen lyser på de som förtjänar det.
7 00:00:15,300 --> 00:00:16,500
Och Jesper Larsson.
8 00:00:17,100 --> 00:00:17,820
Yes, sir.
9 00:00:18,120 --> 00:00:21,100
Den lyser inte på oss, för vi sitter inne och spelar in podd, för vi är så duktiga.
10 00:00:21,600 --> 00:00:22,500
Ja, så är det faktiskt.
11 00:00:22,640 --> 00:00:24,360
Eller så förtjänar vi det inte helt enkelt.
12 00:00:24,840 --> 00:00:25,740
Ja, eller så kan det också vara.
13 00:00:25,740 --> 00:00:28,520
Det är den 24 juni när vi spelar in det här.
14 00:00:29,180 --> 00:00:33,760
Och vi är sponsrade av Ashore, som ni kan läsa mer om på ashore.se.
15 00:00:34,420 --> 00:00:38,500
Dessutom är vi sponsrade av Bordfors Consulting, som ni hittar på bordfors.se.
16 00:00:38,620 --> 00:00:42,860
Och av 0x4a, som ni kan läsa mer om på 0x4a.se.
17 00:00:43,060 --> 00:00:46,160
Vi har inga pluggar, så vi hoppar rätt in i ämnet.
18 00:00:46,380 --> 00:00:47,400
Jesper, take it away.
19 00:00:47,520 --> 00:00:50,640
Yes, idag tänkte vi att vi skulle prata om containers.
20 00:00:50,780 --> 00:00:51,780
Allting containers.
21 00:00:52,300 --> 00:00:55,140
Så det blir en timme med…
22 00:00:55,140 --> 00:00:55,720
Prata om containers.
23 00:00:55,720 --> 00:00:58,940
Om det ska vara 20-fot eller 40-fot, om de ska vara kyla.
24 00:00:58,940 --> 00:01:01,060
Containerbrand har vi sett idag.
25 00:01:02,020 --> 00:01:05,640
Så det blir liksom en ostrukturerad tema, det vi är absolut bäst på.
26 00:01:05,760 --> 00:01:08,500
Vi ska prata ostrukturerat om containers idag, tänkte vi.
27 00:01:08,720 --> 00:01:11,620
Och varför vi har dem.
28 00:01:12,140 --> 00:01:15,640
Och om det är en bra sak eller en dålig sak.
29 00:01:16,820 --> 00:01:21,320
Om vi nu inte pratar om 20-fot och 40-fots containers, och inte de som brinner i Göteborgs hamn just nu.
30 00:01:21,400 --> 00:01:22,980
Vad pratar vi om för containers då, Jesper?
31 00:01:22,980 --> 00:01:30,480
Då pratar vi om små rackans kompartiment, säger man så på svenska.
32 00:01:30,660 --> 00:01:32,980
Kompartments, små delar av ett operativsystem.
33 00:01:33,980 --> 00:01:34,980
Små fack.
34 00:01:34,980 --> 00:01:41,600
Små fack egentligen, som man spinner upp för att göra små saker, specifika tjänster som de blir instruerade att göra.
35 00:01:42,160 --> 00:01:49,780
Man skulle kunna tänka sig att man tar ett operativsystem och sen så delar man upp det i massa små delar
36 00:01:49,780 --> 00:01:52,660
som kan göra saker oberoende av varandra.
37 00:01:52,980 --> 00:02:00,380
Sen kan man koppla på olika gränssnitt och protokoll på det, egentligen.
38 00:02:00,380 --> 00:02:08,480
Man kan väl säga, för att sammanfatta skillnaden mellan en VM och en container är ju att
39 00:02:08,480 --> 00:02:15,640
containerna delar operativsystem och har någon form av container manager ovanpå operativsystemet
40 00:02:15,640 --> 00:02:19,640
medan en virtuell maskin har ju ett eget operativsystem.
41 00:02:20,620 --> 00:02:22,940
Och därmed är det betydligt bulk.
42 00:02:22,980 --> 00:02:25,760
Yes, det här är mycket mer lean.
43 00:02:25,900 --> 00:02:29,000
Man pratar ju om att man har en shim emellan.
44 00:02:29,500 --> 00:02:34,380
Och den shimmen som man använder är väl run-c eller containered.
45 00:02:35,260 --> 00:02:39,440
Men det finns ju massa olika aspekter av containerdrift.
46 00:02:39,640 --> 00:02:45,080
Men det började, vi pratade lite innan här, Mattias nämnde det med LXC då,
47 00:02:45,220 --> 00:02:47,880
eller Shrewdales och sånt där, för länge, länge, länge sedan.
48 00:02:47,880 --> 00:02:52,660
Där man egentligen bygger små kontrollerade miljöer där man kan köra,
49 00:02:52,980 --> 00:02:57,640
en binär eller en tjänst eller vad som helst, liksom.
50 00:02:59,320 --> 00:03:01,840
Och sedan så kom just då, som du var inne på där, Rickard,
51 00:03:01,880 --> 00:03:08,740
virtualiseringen kom ju till byn och öppnade nya dörrar för att använda hårdvaran fullt ut.
52 00:03:08,820 --> 00:03:12,060
För förr i tiden så körde man ju allting på järn, liksom.
53 00:03:12,140 --> 00:03:13,680
Då hade man ju fysiska servrar.
54 00:03:14,420 --> 00:03:20,100
Och man behövde ju en server för att driva sin, jag vet inte, mailserver
55 00:03:20,100 --> 00:03:22,680
eller sin fina nätverk.
56 00:03:22,980 --> 00:03:26,800
Nätverks-share eller sitt AD eller vad det nu kan tänkas vara.
57 00:03:28,300 --> 00:03:31,940
Men man använder ju väldigt sällan hundra procent av den hårdvaran,
58 00:03:32,080 --> 00:03:34,020
utan den är ju inte hundra procent belastad hela tiden.
59 00:03:34,200 --> 00:03:37,720
Och det gör ju att, det är ju i och för sig en bra sak att den inte är hundra procent belastad,
60 00:03:37,780 --> 00:03:41,740
men det gör ju att vi har ju en kostnad för någonting som vi inte använder hela tiden,
61 00:03:41,840 --> 00:03:43,280
för vi kan aldrig vara i toppen.
62 00:03:43,800 --> 00:03:46,960
Och då börjar man ju titta på virtualisering då, där man kan använda en host
63 00:03:46,960 --> 00:03:52,960
för att egentligen nyttja serverns prestanda och hårdvara ännu lite.
64 00:03:52,980 --> 00:03:58,300
Och container-delen är väl då nästa iteration av detta,
65 00:03:58,380 --> 00:04:02,140
det vill säga att vi struntar i den prestanda förlusten,
66 00:04:02,160 --> 00:04:04,120
eller den prestanda förlusten vi får snarare,
67 00:04:04,520 --> 00:04:08,540
av att köra fulla VM-ar med operativsystem och allting som tar massa extra plats
68 00:04:08,540 --> 00:04:11,120
och kräver extra minne och hårdvara.
69 00:04:11,660 --> 00:04:14,200
Så gör vi allting under ett och samma hantering.
70 00:04:14,200 --> 00:04:18,180
Man kan väl säga att man gör väl en mycket brutalare,
71 00:04:19,220 --> 00:04:21,860
alltså i virtualisering så gör man mycket brutalare om man verkligen
72 00:04:21,860 --> 00:04:22,960
har en portion.
73 00:04:22,980 --> 00:04:25,940
Man funktionerar upp för något hårdvaran med lite,
74 00:04:26,960 --> 00:04:32,460
alltså man separerar ju liksom vilken adressrymd och sånt som blir tillgänglig.
75 00:04:32,540 --> 00:04:36,380
Så man gör en väldigt, man använder väldigt låg nivå funktioner på
76 00:04:36,380 --> 00:04:38,660
hur man isolerar grejer.
77 00:04:38,920 --> 00:04:44,180
Medan i containers så tenderar det ju att vara något litet som bara
78 00:04:44,180 --> 00:04:46,100
kör i OS-et.
79 00:04:46,100 --> 00:04:52,500
Så det är inte liksom, det är inte riktigt lika hårt separerat,
80 00:04:52,980 --> 00:04:55,800
i liksom processor-mässigt.
81 00:04:55,800 --> 00:04:57,580
Nej, det är helt rätt.
82 00:04:57,580 --> 00:05:03,700
Och där, det gör ju att har man någon form av sårbarhet i ett container-kontext
83 00:05:03,700 --> 00:05:07,700
så skulle man ju potentiellt kunna göra dumheter med hostens,
84 00:05:07,700 --> 00:05:14,220
alltså själva, ja, själva mittpunkten eller det som spinner upp alla de här containrarna.
85 00:05:14,220 --> 00:05:16,660
Hur funkar egentligen segmenteringen där?
86 00:05:16,660 --> 00:05:21,020
För jag tänkte samma som Peter där, det är ju väsentligt mindre segmenterat än VM-ar.
87 00:05:21,020 --> 00:05:22,120
Men hur funkar,
88 00:05:22,120 --> 00:05:23,920
hur väl segmenterat är det?
89 00:05:23,920 --> 00:05:27,760
Det är ju såhär, hur svårt är det att hoppa mellan containrarna, om man säger så?
90 00:05:28,520 --> 00:05:30,560
Det beror helt och hållet på vad det är man gör.
91 00:05:31,340 --> 00:05:35,180
Det kan vara jättesvårt och det kan vara jätteenkelt, beroende på
92 00:05:35,440 --> 00:05:40,800
dels hur man grundkonfigurerar sina containers, dels till vilket målmiljö man kör containrarna.
93 00:05:41,320 --> 00:05:46,180
Och sen om det finns andra abstraktionslaggrupper på, till exempel orkestrering då.
94 00:05:46,700 --> 00:05:52,080
Men i typiska Linux och Unix,
95 00:05:52,380 --> 00:05:53,920
versioner och så, så
96 00:05:54,420 --> 00:05:57,240
så brukar man ju kunna,
97 00:05:57,760 --> 00:06:01,340
man brukar kunna göra det de kallar för capabilities drop, så att man har,
98 00:06:01,600 --> 00:06:04,400
det står en lista med vilka,
99 00:06:05,180 --> 00:06:09,280
vilka möjligheter du vill kunna ha i operativsystemet som du vill slänga bort.
100 00:06:10,040 --> 00:06:16,180
Och capabilities är ju en vanlig grej då, man skulle kunna likställa det egentligen med en brandvägg.
101 00:06:16,440 --> 00:06:21,300
Och man använder capabilities egentligen för att man inte ska köra containrarna som rot.
102 00:06:22,120 --> 00:06:27,500
Och då kan man, då har man uppfunnit ett begrepp som Peter säger där, capabilities, som man har delat upp i olika objekt
103 00:06:28,000 --> 00:06:30,820
som kan göra högprivilegierade saker, till exempel
104 00:06:31,080 --> 00:06:32,880
binda ett nätverksinterface
105 00:06:33,380 --> 00:06:34,160
eller
106 00:06:34,400 --> 00:06:36,960
mounta någonting med hemligheter på.
107 00:06:37,220 --> 00:06:43,120
Men det är ju något, det är ju något du kan göra i vilka applikationer som helst, det behöver inte vara en container egentligen, men en container,
108 00:06:43,880 --> 00:06:49,260
man har det i konfigurationen till en docker container, så kan man skriva liksom vilka,
109 00:06:49,760 --> 00:06:50,800
vilka man vill.
110 00:06:51,300 --> 00:06:52,080
Oftast gör man det,
111 00:06:52,340 --> 00:06:55,400
det är ett manifest, det vill säga i konstruktet av containern
112 00:06:55,660 --> 00:07:00,020
så definierar man allting om containern och vilka förutsättningar den har att existera.
113 00:07:00,520 --> 00:07:02,320
Så normalt sett är det att man kanske har en
114 00:07:02,580 --> 00:07:05,640
bootstrap-process, det vill säga att man har liksom en,
115 00:07:05,900 --> 00:07:11,800
man ska lägga på en specifik image och sen ska man ladda en specifik konfigurationsfil
116 00:07:12,040 --> 00:07:13,320
och när man är klar med det
117 00:07:13,580 --> 00:07:15,380
så ska man göra a, b, c och d.
118 00:07:15,640 --> 00:07:18,440
Så capabilities är oftast någonting man kör
119 00:07:18,960 --> 00:07:21,780
och när man är klar med det så droppar man capabilities.
120 00:07:22,080 --> 00:07:28,480
Men det är liksom inte en en-i-en-i-regel i en brandväg utan man lägger till det man behöver och sedan plockar man bort
121 00:07:29,000 --> 00:07:30,520
det man ska göra.
122 00:07:31,040 --> 00:07:39,240
Eller det man inte behöver längre, så man kör bara de capabilities som behövs egentligen för att köra processen på den här containern.
123 00:07:39,480 --> 00:07:43,080
Men vad är det som enforcerar dem, är det runtime-grejen då eller?
124 00:07:43,320 --> 00:07:44,360
Jättebra fråga!
125 00:07:44,600 --> 00:07:45,380
Det beror på.
126 00:07:46,400 --> 00:07:49,480
Capabilities är ju den, alltså process,
127 00:07:50,240 --> 00:07:51,780
när du startar en process,
128 00:07:52,080 --> 00:07:53,100
så kan,
129 00:07:53,360 --> 00:07:58,480
så kan du ju, du kan ju starta så typ med root eller vilka rättigheter du vill och så,
130 00:07:59,000 --> 00:08:01,560
och så kan du allt eftersom att du blir,
131 00:08:01,800 --> 00:08:07,180
du vet att nu är jag klar med förmågan att kunna binda någonting till nätverkskortet, jag kommer aldrig behöva den,
132 00:08:07,700 --> 00:08:10,520
så släpper du den capabilitiesen allt eftersom.
133 00:08:11,020 --> 00:08:14,600
Men det Mattias säger är, var konfigureras detta?
134 00:08:14,860 --> 00:08:16,140
Misstänker jag att frågan var?
135 00:08:16,400 --> 00:08:18,440
Ja men du var inne på docker-manifestet,
136 00:08:18,700 --> 00:08:19,980
så då finns ju…
137 00:08:20,240 --> 00:08:22,040
Ja men det finns ju på oändligt många ställen.
138 00:08:22,340 --> 00:08:27,960
Och tar man i kubinetisk världen till exempel, då kan man sätta det på podd,
139 00:08:28,480 --> 00:08:29,760
man kan sätta det på container,
140 00:08:30,020 --> 00:08:31,300
man kan sätta det på service,
141 00:08:31,800 --> 00:08:35,400
man kan sätta det på vad som helst, och den har en successionsordning.
142 00:08:36,160 --> 00:08:39,240
Men då får du förklara, vad är skillnaden mellan en podd och en container?
143 00:08:40,260 --> 00:08:45,120
Ja jättebra, jättebra, det är egentligen inte så stor skillnad, det är bara att man
144 00:08:45,380 --> 00:08:49,220
delar upp det i olika beståndsdelar just i kubinetisk världen,
145 00:08:49,480 --> 00:08:51,000
för att man ska kunna
146 00:08:51,000 --> 00:08:53,560
gruppa olika objekt som man kan…
147 00:08:53,820 --> 00:08:58,420
Men är inte en podd en låda där du kan lägga flera containers i?
148 00:08:58,680 --> 00:09:00,720
Det är liksom en låda som du kan lägga fler lådor i?
149 00:09:01,240 --> 00:09:04,560
Ja men absolut, absolut, och där bygger man då olika kontext.
150 00:09:04,820 --> 00:09:05,840
Så det vill säga,
151 00:09:06,100 --> 00:09:08,160
poddarna ska ha den här kapabiliteten,
152 00:09:08,660 --> 00:09:13,280
men container-manifestet ska ha den här kapabiliteten.
153 00:09:13,520 --> 00:09:18,140
Och då blir det, då har du en olika successionsordning, vilken som läggs på och inte läggs på.
154 00:09:18,140 --> 00:09:24,280
Och det här finns ju då i en absurdum, olika delegationsmodeller som man kan applicera.
155 00:09:24,540 --> 00:09:31,700
Kubernetes har native, men sen så kan man lägga på olika instrumenteringsverktyg i sitt kubinetiskt kluster.
156 00:09:31,960 --> 00:09:36,060
Till exempel att man kör Calico eller man kör Istio eller man kör
157 00:09:36,320 --> 00:09:40,160
Kops eller man har någon form av
158 00:09:40,420 --> 00:09:44,000
mittpunkt där man kan regelstyra allt möjligt, alltifrån
159 00:09:44,500 --> 00:09:48,100
nätverkslager till säkerhetspolicy som dikterar vilka
160 00:09:48,400 --> 00:09:51,720
autorisationsmodeller som ska tillämpas på vilka entiteter.
161 00:09:51,980 --> 00:09:55,560
Men också om vi ska ha Mutual TLS i vissa delar av klustret eller
162 00:09:55,820 --> 00:10:01,960
om vilka gruppade objekt som får prata så här och vilka gruppade objekt som ska hämta hemligheter ifrån Y och Z och Q.
163 00:10:02,220 --> 00:10:05,540
Så konfigurationsmöjligheterna här är extrema.
164 00:10:06,060 --> 00:10:08,880
Så det kan sättas på många olika sätt.
165 00:10:11,180 --> 00:10:13,220
Coolt, det låter som många ställen att göra fel på.
166 00:10:13,740 --> 00:10:18,100
Ja absolut, och där kan vi ju nämna infrastruktur som kod som är
167 00:10:18,400 --> 00:10:23,000
någonting som har poppat upp ur den här DevOps-eran egentligen eller
168 00:10:23,260 --> 00:10:29,400
den har nog egentligen alltid funnits men den har inte varit så utvecklad nära i min åsikt som den faktiskt är nu.
169 00:10:29,920 --> 00:10:35,800
För nu gör man egentligen inte så skillnad på systemadministratörer och utvecklare i dagens läge.
170 00:10:36,060 --> 00:10:38,880
Det finns såklart undantag här där man fortfarande har de här
171 00:10:39,140 --> 00:10:41,180
tydliga rollerna men oftast så
172 00:10:41,700 --> 00:10:46,300
i lite moderna och lite mer agila organisationer så pratar man ju om just DevOps-koncept.
173 00:10:48,140 --> 00:10:55,560
Jag tänker att det här känns ju som att det är väldigt utvecklardrivet och utvecklarna
174 00:10:56,840 --> 00:11:04,260
i princip dikterar infrastrukturen med konfiguration och kod.
175 00:11:05,040 --> 00:11:08,360
Ja, så skulle man absolut kunna uttrycka det.
176 00:11:08,880 --> 00:11:14,000
Så hela din serverpark är numera ett Git repository någonstans.
177 00:11:16,560 --> 00:11:17,840
Och det gör ju också då att
178 00:11:18,140 --> 00:11:22,500
din konfiguration och din infrastruktur blir ju bara så bra
179 00:11:22,740 --> 00:11:23,520
som
180 00:11:24,280 --> 00:11:25,560
du kan konfigurera den.
181 00:11:25,820 --> 00:11:27,620
Och det är väldigt få som
182 00:11:27,860 --> 00:11:32,480
håller koll egentligen och har liksom en idé om exakt hur saker och ting funkar i
183 00:11:32,980 --> 00:11:37,080
Kubernetes-världen. Man har ju olika skal som man lägger på. Det kan vara dels att din
184 00:11:37,600 --> 00:11:44,500
byggserver eller din byggpipeline stöder ett sätt eller en typ av konfigurationssubset.
185 00:11:45,020 --> 00:11:48,100
Men din cloudleverantör kanske har en annan
186 00:11:48,400 --> 00:11:49,680
typ av konfigurationssubset.
187 00:11:49,940 --> 00:11:56,080
Så det är ganska, det är ett rörligt mål här och det tenderar oftast att bli ganska lösningsfokuserat i min,
188 00:11:56,580 --> 00:11:57,860
i mitt perspektiv. Det vill säga att man,
189 00:11:58,380 --> 00:12:00,420
ja men det här funkar, då kör vi på det.
190 00:12:00,680 --> 00:12:05,540
Och där kanske man inte riktigt ser alla vektorer som man kanske öppnar upp när man gör en viss grej.
191 00:12:05,800 --> 00:12:10,420
Typ som det Peter är inne på är någonting som är väldigt vanligt det här med drop capabilities.
192 00:12:10,660 --> 00:12:14,760
Man mountar väldigt mycket högprivilegierade kapabiliteter men man släpper dem aldrig sen.
193 00:12:15,780 --> 00:12:17,580
Eller så tror man att man har släppt dem.
194 00:12:17,580 --> 00:12:21,160
Men då sätter man, då kanske man släpper dem i ett annat kontext
195 00:12:21,420 --> 00:12:24,240
som då inte ligger i successionsordningen för den
196 00:12:24,500 --> 00:12:26,280
orkestreringsmotorn som man har valt.
197 00:12:27,060 --> 00:12:29,360
Vilket kan skapa jätteproblem för då
198 00:12:29,620 --> 00:12:30,640
tror man att man har gjort
199 00:12:30,900 --> 00:12:32,680
en regel som gör någonting
200 00:12:33,200 --> 00:12:34,740
men man har inte kunnat validera den.
201 00:12:35,240 --> 00:12:37,040
Och där är en jävligt intressant sak.
202 00:12:38,320 --> 00:12:41,380
Utvecklarna klarar av att definiera infrastruktur.
203 00:12:41,900 --> 00:12:44,200
Men hur gör vi med valideringen och testningen?
204 00:12:46,000 --> 00:12:47,540
Ja och
205 00:12:47,840 --> 00:12:52,700
specifikt capabilities då, där är det ju
206 00:12:53,720 --> 00:12:59,100
det är ju väsentligen att om man droppar capabilities så säger man ju bara att man inte ska kunna göra någonting.
207 00:12:59,860 --> 00:13:01,400
Men
208 00:13:02,940 --> 00:13:09,080
om du inte testar det liksom, vilket du förmodligen inte gör i något normalt flöde så kommer du ju aldrig veta om du har
209 00:13:09,340 --> 00:13:10,880
lyckats släppa dina capabilities.
210 00:13:11,640 --> 00:13:13,700
För en fel konfiguration
211 00:13:14,460 --> 00:13:16,260
om inte en fel konfiguration
212 00:13:16,500 --> 00:13:17,540
stoppar
213 00:13:17,840 --> 00:13:21,160
om inte en fel konfiguration orsakar något problem för dig eller
214 00:13:21,680 --> 00:13:26,020
eller liksom syntaxmässigt blir fel i vilket konfigurationsspråk du nu använder så
215 00:13:26,540 --> 00:13:27,820
så märker du inte något sånt.
216 00:13:28,080 --> 00:13:32,420
Det är ju typ först när du försöker bryta, försöker göra någonting med capabilities så du
217 00:13:32,940 --> 00:13:34,480
får veta att du har dem.
218 00:13:34,740 --> 00:13:39,600
Det är oftast det hållet att man har för lite behörigheter. Man har oftast inte för mycket behörigheter.
219 00:13:40,100 --> 00:13:41,900
Vilket ofta resulterar i att
220 00:13:42,160 --> 00:13:44,980
den här fasen att få det bara att funka nu tack.
221 00:13:45,480 --> 00:13:47,540
Sen när man då sitter och pillar
222 00:13:47,840 --> 00:13:52,960
det är väldigt vanligt då att man till exempel, man spinner kanske upp en podd eller en container
223 00:13:53,220 --> 00:13:53,980
som
224 00:13:54,240 --> 00:13:56,020
en högprivilegierad användare.
225 00:13:56,280 --> 00:14:00,640
För att sedan droppa ner till en annan användare så att man, det är det man har lärt sig
226 00:14:00,900 --> 00:14:05,240
i klassisk härdning egentligen, att om vi försöker köra de tjänsterna och demonerna
227 00:14:05,760 --> 00:14:11,640
som, ja men ta en webbserver till exempel, då har man en Apache-användare eller en Nginx-användare om man nu är
228 00:14:11,900 --> 00:14:13,180
lagd åt Linux-hållet
229 00:14:13,700 --> 00:14:17,280
som då har ett subset av rättigheter som behövs för att köra den
230 00:14:17,580 --> 00:14:19,120
rollen man är ansvarig för.
231 00:14:19,380 --> 00:14:23,220
Istället för att köra dem som roto eller som systemadministratör.
232 00:14:23,460 --> 00:14:25,260
Och där är det ju såhär
233 00:14:26,800 --> 00:14:33,200
Man testar fram och tillbaka, ja men jag droppar rättigheter, jag vill vara den här användaren men jag kanske
234 00:14:33,700 --> 00:14:40,360
inte validerar att jag faktiskt är den användaren för att jag började testa som superduperadmin och jag har sedan
235 00:14:40,620 --> 00:14:41,900
droppat kapabiliteten.
236 00:14:42,160 --> 00:14:43,440
Är det nu då så att
237 00:14:43,940 --> 00:14:46,260
rätt manifest är på? Är det inte det?
238 00:14:46,500 --> 00:14:47,540
Och det är ju
239 00:14:48,100 --> 00:14:51,420
någonting man kan göra till exempel i Kubernetes då. Man kan i
240 00:14:51,680 --> 00:14:52,960
ett kubinetiskt kluster
241 00:14:53,220 --> 00:14:56,280
använda kub-control eller vad man nu har för kommando
242 00:14:56,540 --> 00:15:01,660
eller vad man har för nu administrationsinterface. Jag tror att det går att göra via dashboarden också. Jag tror att det är så många som använder den men
243 00:15:01,920 --> 00:15:05,240
man kan göra det via kub-control som är ett command-line-interface för att
244 00:15:05,500 --> 00:15:08,820
kommunicera och prata med ditt kluster egentligen.
245 00:15:09,340 --> 00:15:15,220
Där kan man ju titta då, vilka grejer är det som faktiskt körar? Vilken konfiguration är aktiv nu?
246 00:15:16,000 --> 00:15:17,540
Och det tror jag det är ganska få som
247 00:15:17,840 --> 00:15:18,340
gör.
248 00:15:18,600 --> 00:15:21,160
Och det är någonting jag brukar göra. Så jag tittar då på
249 00:15:21,420 --> 00:15:24,240
vilka kontext sätter vi olika parametrar?
250 00:15:24,500 --> 00:15:26,280
Vilken ärver vem?
251 00:15:26,800 --> 00:15:30,380
För det är läskigt och det ändras, har ändrats
252 00:15:30,900 --> 00:15:33,700
fram och tillbaka i Kubernetes historia, lilla historia.
253 00:15:34,220 --> 00:15:38,060
Och i och med att det är ett väldigt hett ämne så är det mycket ämne, eller mycket saker som ändras hela tiden.
254 00:15:39,080 --> 00:15:43,180
Så konfigurationsfel här är väldigt lätt att göra för att det är svårupptäckt.
255 00:15:43,700 --> 00:15:47,540
För att det är inte en del av slutprodukten. Slutprodukten är oftast en applikation som ska vara
256 00:15:47,840 --> 00:15:48,860
snurra och dela med 3D.
257 00:15:50,140 --> 00:15:51,940
Det låter lite stökigt det här.
258 00:15:52,180 --> 00:15:56,540
Om jag nu vill bygga, hej jag ska använda containrar.
259 00:15:56,800 --> 00:16:02,180
Hur ska jag tänka för att bygga säkra containrar? Så att jag inte fuckar upp?
260 00:16:02,680 --> 00:16:07,300
Separation och segmentering är väldigt viktigt.
261 00:16:07,800 --> 00:16:13,940
Och då tänker folk, eller jag tänker i vart fall direkt på nätverk, liksom separation och segmentering.
262 00:16:14,200 --> 00:16:16,500
Och det är mångt och mycket sant.
263 00:16:17,020 --> 00:16:17,540
Men
264 00:16:17,840 --> 00:16:22,180
i Kubernetes-världen så har vi ju
265 00:16:22,440 --> 00:16:27,300
olika proxy-tjänster. Vi har ingress och egress-controllers. Vi har massa grejer då som kan
266 00:16:27,820 --> 00:16:31,400
användas för att kommunicera.
267 00:16:31,660 --> 00:16:34,220
Och de behöver nödvändigtvis inte bara
268 00:16:34,740 --> 00:16:39,600
vara nedlåsta på nätverksnivå, det vill säga på IP-adresser och sådär, utan det kan ju vara då i
269 00:16:39,860 --> 00:16:45,220
olika, man kan ha namnsseparation till exempel i Kubernetes, det vill säga att man låser på namespace.
270 00:16:46,000 --> 00:16:47,540
Och det är väl någon
271 00:16:47,840 --> 00:16:49,380
någonting som man skulle kunna definiera.
272 00:16:49,620 --> 00:16:53,460
Sedan så kan man ju också då låsa ner på nätverksnivå att vi tillåter ingen,
273 00:16:54,240 --> 00:16:58,840
inga poddar och prata direkt med varandra, utan de måste kommunicera via en proxy
274 00:16:59,360 --> 00:17:02,680
direkt för att vi ska kunna validera vad det är de ska.
275 00:17:03,200 --> 00:17:09,340
Man kan köra sockets, man kan göra massa grejer, så att konfigurationsmöjligheterna är enorma. Och vad man oftast gör då
276 00:17:10,100 --> 00:17:16,500
det är att man har någon form av ingress-egress-controller där man kan regelstyra vad som man får lov att göra och inte göra.
277 00:17:17,580 --> 00:17:23,720
Men i Kubernetes-världen native, det vill säga vi har bara Kubernetes nu, vi har inga tredjeparts-
278 00:17:23,980 --> 00:17:30,120
bibliotek som vi installerat eller tredjepartstjänster som vi använder för att managera vårt kluster, då är det ganska vanligt att man bygger
279 00:17:30,380 --> 00:17:34,480
nätverks-policy-objekt eller att man bygger security-policy-objekt.
280 00:17:35,240 --> 00:17:41,900
Och vad de gör egentligen det är att man skapar ett manifest eller en jammeldefinition
281 00:17:42,660 --> 00:17:47,540
som man sedan på gruppnivå lägger till, så det vill säga här är liksom grundläggande här.
282 00:17:47,840 --> 00:17:50,660
För mina poddar som ska prata med internet.
283 00:17:51,420 --> 00:17:52,960
Då definierar vi vad
284 00:17:53,220 --> 00:17:58,340
vi kan lägga på på de här webbservlarna då som är en del av de här autoscalade poddarna.
285 00:17:58,840 --> 00:18:00,640
Vad de får lov att göra och inte göra.
286 00:18:01,400 --> 00:18:07,540
Och sedan så kanske vi har en pki eller någonting vid sidan av, ja men då är det bara vissa poddar som får lov att prata med den.
287 00:18:07,800 --> 00:18:08,820
Då kanske vi sätter upp
288 00:18:09,080 --> 00:18:11,140
och definierar reglerna för
289 00:18:11,380 --> 00:18:17,280
Mutual TLS kanske, vi ska ha certifikat fram och tillbaka som måste stämma i båda ändarna för att man ska kunna
290 00:18:17,580 --> 00:18:19,880
upprätta en session eller prata.
291 00:18:20,400 --> 00:18:24,740
Eller så kan det vara så att vi skapar autorisationsflöden, det vill säga att vi definierar
292 00:18:25,000 --> 00:18:29,100
Ja den här tjänsten får prata genom det här API-et då, för vi har ju
293 00:18:29,860 --> 00:18:33,460
olika API-möjligheter även i Kubernetes-världen.
294 00:18:33,700 --> 00:18:36,020
Programmatiskt får lov att prata med olika delar av klustret.
295 00:18:37,040 --> 00:18:40,360
Vem är det som, alltså vilken
296 00:18:40,620 --> 00:18:46,260
vilken liten tomte som springer omkring här är det som enforcerar det här? Om vi har suttit upp en regel som säger att
297 00:18:46,260 --> 00:18:51,380
som till exempel som du sa att poddarna får inte prata direkt med varandra utan du måste gå via
298 00:18:51,640 --> 00:18:54,460
typ central proxy eller någonting för att styra accesskontroll.
299 00:18:54,960 --> 00:18:55,980
Vem enforcerar det?
300 00:18:56,240 --> 00:19:04,700
I en orkestreringsmotor då, om vi nu pratar Kubernetes, då är det kubesystem, alltså kubesystem namespacet innehåller en massa olika
301 00:19:07,000 --> 00:19:12,380
arbetare kan man säga och i de här arbetarna, där bor poddarna och det är de djuren.
302 00:19:12,620 --> 00:19:14,940
Men kubesystem är liksom
303 00:19:15,440 --> 00:19:16,220
moderna,
304 00:19:16,520 --> 00:19:19,340
modemet som håller koll på alla flöden, håller koll på
305 00:19:19,580 --> 00:19:25,220
nätverkstacken, håller koll på alla konstrukt och håller koll på hur saker och ting ska skala framför allt.
306 00:19:25,980 --> 00:19:31,360
Så all resursallokering och sånt sätts ju på klusternivå på högt nivå i kubesystem.
307 00:19:31,620 --> 00:19:35,980
Men det måste finnas någon lokal information på hosten också eller i Norden gissar jag på?
308 00:19:36,220 --> 00:19:40,580
Det görs ju då med hjälp av manifest då, de här Jammel-konstrukten.
309 00:19:42,620 --> 00:19:46,220
Men det är någon runtime-grej då som vakar över de här poddarna lokalt?
310 00:19:46,520 --> 00:19:48,560
Som bestämmer vad de får göra och inte göra?
311 00:19:49,080 --> 00:19:52,920
Ja, det är liksom en Nord-process liksom, som är en del av klustret.
312 00:19:53,180 --> 00:19:59,320
Jag är lite osäker här, men jag skulle gissa att när de gör sådana här
313 00:20:00,340 --> 00:20:03,920
begränsar ur olika poddar och sådant, vad de kan snacka med,
314 00:20:04,440 --> 00:20:10,320
så gömmer de ju förmodligen det riktiga nätverket och nätverkshandlare upp och går ner i någon
315 00:20:10,840 --> 00:20:13,900
socket som går iväg till den här demonen som sköter
316 00:20:14,420 --> 00:20:15,960
det mjukare definierade nätverksreglerna.
317 00:20:16,260 --> 00:20:22,400
Precis, du kan ju binda liksom direkt till hårdvara, men det gör man ju inte så ofta då.
318 00:20:23,940 --> 00:20:30,080
Utan du gör precis det som Peter säger, att du spinner ju upp egna interface som är lokala liksom.
319 00:20:30,340 --> 00:20:33,160
Så det är liksom lager i lager-grej egentligen.
320 00:20:33,920 --> 00:20:38,540
Är det typ Docker Demon eller Kubelet eller något där som styr det här då?
321 00:20:39,040 --> 00:20:45,700
Ja, om man nu använder då att köra Docker Demon, man kan ju använda andra container-motorer också.
322 00:20:46,260 --> 00:20:49,080
Men Docker är ju väl en utav de vanligaste då.
323 00:20:52,400 --> 00:20:58,540
Men den är lite viktig då känns det, det är det som är polisen egentligen, det är den som håller ordning så att det inte sker oegentligheter.
324 00:20:59,060 --> 00:21:04,940
Ja, och oftast då så vill man inte hålla på och lalla där, utan man installerar då ett tredjepartsprojekt då
325 00:21:05,460 --> 00:21:07,000
som hjälper dig med detta så att du kan
326 00:21:09,040 --> 00:21:12,620
med grova penseldrag bygga schyssta policies som låser ner ditt kluster.
327 00:21:12,880 --> 00:21:13,900
Nu säger
328 00:21:14,160 --> 00:21:15,700
tredjepartslibbet,
329 00:21:15,700 --> 00:21:19,800
är det det Kubernetes du syftar på då eller vad är liksom det?
330 00:21:20,060 --> 00:21:24,400
Ett sånt här open source då för att bygga någon form utav
331 00:21:24,660 --> 00:21:27,980
nätverkssäkerhet skulle kunna vara Calico då.
332 00:21:28,500 --> 00:21:30,540
Och Calico är en,
333 00:21:30,800 --> 00:21:32,860
vad ska jag säga, en
334 00:21:35,420 --> 00:21:42,580
vad ska man säga, det är liksom en egen poddinfrastruktur som du slänger in då för att kunna
335 00:21:43,100 --> 00:21:45,660
bygga upp regelstyrning i ditt nätverk.
336 00:21:45,960 --> 00:21:49,020
Så då har du dels möjligheten att bygga
337 00:21:49,540 --> 00:21:51,580
autoskalande
338 00:21:51,840 --> 00:21:55,940
funktioner, det vill säga när någonting drar kapacitet så skulle jag kunna
339 00:21:56,460 --> 00:21:59,780
bygga på mer resurser till de här tjänsterna.
340 00:22:00,040 --> 00:22:01,320
Men vi kan då också
341 00:22:01,580 --> 00:22:06,700
ha, vad säger man, ALG, aggregerade lister, definitionslister på
342 00:22:06,940 --> 00:22:11,300
vad säkerhet är, så man ska kunna lägga på regler att det här måste ni
343 00:22:11,560 --> 00:22:14,380
lägga på för att vara säkra.
344 00:22:14,620 --> 00:22:15,660
Och då får man liksom en
345 00:22:15,920 --> 00:22:17,460
definitionslista gratis av
346 00:22:17,960 --> 00:22:18,740
Calico kan man säga,
347 00:22:18,980 --> 00:22:21,300
som man lägger på på poddarna då för att skydda dem.
348 00:22:22,320 --> 00:22:23,080
Egentligen.
349 00:22:24,100 --> 00:22:27,940
Och det gör man med olika native-funktionaliteter, det är podd security
350 00:22:28,460 --> 00:22:34,600
eller man kan använda security policies eller network policies i ett kubinetiskt kluster och det kan man ju använda i kombination.
351 00:22:38,700 --> 00:22:39,720
Jag tänker,
352 00:22:39,980 --> 00:22:45,360
vi började med att säga att det här är en liten svagare segmentering än egentligen virtuella miljöer är.
353 00:22:45,920 --> 00:22:52,060
Och så säger vi väldigt många sådana här runtime-miljöer som utvecklas parallellt med varandra och det går fort.
354 00:22:52,320 --> 00:22:55,640
Och det är poppigt ibland att köra den ena och ibland den andra.
355 00:22:55,900 --> 00:23:04,100
Containers som delar host med kanske olika känsligheter i de olika containerna.
356 00:23:04,600 --> 00:23:09,460
Och vi bygger saker snabbt för att det vill marknaden. Jag ser potential här för
357 00:23:09,980 --> 00:23:11,000
att det kan gå dåligt.
358 00:23:11,520 --> 00:23:15,100
Och då inte bara på konfig-sidan.
359 00:23:15,660 --> 00:23:17,700
Det är ju egentligen redan berört, utan jag tänker mer på
360 00:23:18,220 --> 00:23:22,820
alltså den här kontrollerande koden, den här lilla lokala polisen, alltså runtime-miljön.
361 00:23:23,080 --> 00:23:25,640
Och interfacet mellan egentligen
362 00:23:26,160 --> 00:23:30,000
containern där det förmodligen kommer, om det går dåligt någonstans så är det ju containern det kommer gå dåligt.
363 00:23:30,500 --> 00:23:33,580
Det är ju där vi har kontakter med omvärlden.
364 00:23:33,840 --> 00:23:36,140
Och om jag då får någon form av
365 00:23:36,400 --> 00:23:39,720
exekverbar möjlighet där, om jag som bov kan göra någonting därifrån.
366 00:23:39,980 --> 00:23:43,060
Hur säkert är det då uppåt, det vill säga hur
367 00:23:43,300 --> 00:23:45,620
det API-et upp mot
368 00:23:45,920 --> 00:23:46,940
runtime-miljön?
369 00:23:47,200 --> 00:23:48,740
Jesper, var det inte så
370 00:23:48,980 --> 00:23:50,020
var det inte
371 00:23:50,260 --> 00:23:53,080
när Uber åkte på det för
372 00:23:53,340 --> 00:23:54,360
något år sedan eller två?
373 00:23:55,140 --> 00:23:56,920
Var det inte precis en sån
374 00:23:57,180 --> 00:24:00,260
problematik som Mattias beskriver här, som de drabbades av?
375 00:24:00,500 --> 00:24:06,140
Alltså ett vanligt trick då är att om man till exempel då, jag är osäker på hela Uber-grejen, för det har varit så jävla många.
376 00:24:06,400 --> 00:24:09,980
Det var typ Container Breakout eller de tog sig helt enkelt till styrplattan.
377 00:24:10,240 --> 00:24:15,620
Container Breakout kan vara jättesimpelt. Har man ett dåligt isolerat kluster, det vill säga att man kör allt
378 00:24:15,920 --> 00:24:18,480
i samma namespace, då finns det ingen separation.
379 00:24:20,260 --> 00:24:21,040
Så det vill säga då att
380 00:24:21,300 --> 00:24:28,720
för att spinna upp alla de här grejerna så måste ju modemodemet, de här working-orden och klusternorden, de måste ju kunna prata och instrumentera de här containrarna.
381 00:24:29,740 --> 00:24:35,620
Och det gör man oftast med tokens eller så gör man det med certifikat eller man gör det med en extern
382 00:24:36,140 --> 00:24:40,740
autorisation eller auth provider. Men oftast så gör man det via tokens då.
383 00:24:41,520 --> 00:24:45,620
Och de här tokensen är i servicekonton. Har man inte en separation, det vill säga att man har en
384 00:24:45,920 --> 00:24:48,220
lagt en behörighetsmodell på de där servicekontorna.
385 00:24:48,740 --> 00:24:52,580
Ja då kan man ju använda dem för att säga, för att
386 00:24:53,080 --> 00:24:55,640
få lov att ställa frågor till klustret till exempel.
387 00:24:56,160 --> 00:24:57,440
Så någonting som är ganska vanligt
388 00:24:57,700 --> 00:25:01,780
när man får en RCE eller en SSRF i en
389 00:25:03,580 --> 00:25:06,400
container. Får man en full RCE då
390 00:25:06,900 --> 00:25:08,960
tittar man på vilka servicetokens man har.
391 00:25:09,720 --> 00:25:14,840
Saknar då podden i gräsfiltrering, det vill säga att jag får lov att ringa ut.
392 00:25:15,660 --> 00:25:21,300
Jag får lov att surfa från den här podden. Den har obehindrad access till internet.
393 00:25:21,540 --> 00:25:23,340
Vilket är väldigt, väldigt vanligt idag.
394 00:25:24,100 --> 00:25:30,260
Så ska man ju veta det att det är någon form av core OS eller någon form av Linux distribution som ligger i botten och kör
395 00:25:30,500 --> 00:25:33,580
alla de här binärerna som du vill köra då i din miljö.
396 00:25:34,100 --> 00:25:37,420
Och där ligger ju veget och curl och hela den här biten.
397 00:25:37,680 --> 00:25:39,220
Så säger du att vi har RCE.
398 00:25:39,460 --> 00:25:41,000
Vi har ingen i gräsfiltrering.
399 00:25:41,260 --> 00:25:45,360
Och vi är i ett kontext där vi inte har någon separation i kubinetiskt klustret.
400 00:25:45,660 --> 00:25:49,500
Det vill säga att vi har en servicetoken som kan lista saker och ting i klustret.
401 00:25:50,020 --> 00:25:52,320
Vilket är vanligt om man inte har konfigurerat ordentligt.
402 00:25:53,860 --> 00:25:54,880
Får man då en RCE
403 00:25:55,140 --> 00:25:58,720
så är det ingenting som stoppar attackeraren att ladda ner sin egen version
404 00:25:58,980 --> 00:26:00,260
av kubekontroll.
405 00:26:00,500 --> 00:26:01,540
Installera det
406 00:26:02,040 --> 00:26:05,620
på podden genom att man har då höga rättigheter.
407 00:26:05,880 --> 00:26:07,680
Då kan du ladda ner och sen
408 00:26:08,440 --> 00:26:14,580
sätter du execution bit på din binär och sen så kan du använda kubectl och servicetoken
409 00:26:14,840 --> 00:26:15,620
som är automountad.
410 00:26:15,920 --> 00:26:16,420
På maskinen
411 00:26:16,680 --> 00:26:18,480
för att fråga klustret efter saker.
412 00:26:19,240 --> 00:26:20,520
Och här blir det intressant då.
413 00:26:21,040 --> 00:26:24,620
Skulle man till exempel kunna köra describe secrets då.
414 00:26:24,880 --> 00:26:25,900
Describe secrets
415 00:26:26,160 --> 00:26:28,460
det säger ju sig själv.
416 00:26:28,720 --> 00:26:31,280
Och använder man till exempel kubectl describe secrets
417 00:26:31,540 --> 00:26:34,340
då kommer den att kunna lista alla hemligheter den kan läsa.
418 00:26:35,380 --> 00:26:36,900
Har man då ingen separation här
419 00:26:37,160 --> 00:26:39,720
då börjar man få riktigt allvarliga problem.
420 00:26:41,520 --> 00:26:42,020
Men
421 00:26:42,280 --> 00:26:45,620
det kan också då vara så att man i ett namespace där det finns
422 00:26:45,920 --> 00:26:47,700
det är bra separation, det är det.
423 00:26:48,220 --> 00:26:50,260
Men servicetokerna kan läsa
424 00:26:50,520 --> 00:26:51,540
miljövariablar.
425 00:26:51,800 --> 00:26:53,340
De kan liksom läsa
426 00:26:54,360 --> 00:26:55,900
Ja, vad ska vi dra till med?
427 00:26:56,160 --> 00:26:58,980
När de kör describe secrets så får de fram en
428 00:26:59,480 --> 00:27:03,320
Redis, då får de fram Redis credentials till exempel.
429 00:27:04,600 --> 00:27:10,240
Då kan man ju från den podden om de inte har nätverksisolation nå den där Redis-instansen och sedan börja manipulera den.
430 00:27:11,260 --> 00:27:14,340
Det här låter förvirrande likt
431 00:27:14,580 --> 00:27:15,620
klassiska avdelningar.
432 00:27:15,920 --> 00:27:19,240
Det finns ju också tokens
433 00:27:19,500 --> 00:27:21,800
i hostarna som man kan använda mot API-erna.
434 00:27:22,060 --> 00:27:23,600
Där har du ett metadata-lager
435 00:27:23,860 --> 00:27:29,220
utöver då som håller koll på ungefär motsvarande där vi är nu
436 00:27:29,480 --> 00:27:31,280
skulle jag säga.
437 00:27:31,540 --> 00:27:33,840
Bara det att det här är en nivå längre ner då.
438 00:27:34,100 --> 00:27:40,240
Så det här är typ nästan identisk problembild fast det är som du säger ett lager ner eller upp eller hur?
439 00:27:40,500 --> 00:27:41,780
Så är det.
440 00:27:42,280 --> 00:27:43,560
Men det är
441 00:27:43,820 --> 00:27:45,620
i och för sig, nu när jag säger det, det är sällan jag hittar det.
442 00:27:45,920 --> 00:27:50,260
Det är ett så dåligt separerat kluster. Men det gjorde jag faktiskt i förra veckan.
443 00:27:50,520 --> 00:27:52,320
Och då
444 00:27:52,580 --> 00:27:56,920
när man kör describe secrets egentligen ifrån en servicetoken
445 00:27:57,180 --> 00:28:00,000
då tittar du bara på hemligheterna i ditt eget kontext.
446 00:28:00,760 --> 00:28:05,880
Men om man då till exempel kör describe secrets och så sätter man all namespaces och så kör man
447 00:28:06,140 --> 00:28:12,020
att man vill trycka ut det här i någon YAML-format och du får ett resultat då. Ja då är det ju jätteproblem för det betyder att
448 00:28:12,540 --> 00:28:14,080
den här servicetoken som du nu har läckt
449 00:28:14,340 --> 00:28:16,120
får lov att lista alla hemligheter i hela klustret.
450 00:28:16,900 --> 00:28:22,020
Och då har vi problem för där har vi då certifikat och vi har servicetokens och vi har allt möjligt.
451 00:28:22,520 --> 00:28:24,840
Och då är det klustret, det är ju game over liksom.
452 00:28:26,620 --> 00:28:27,900
Men går det att
453 00:28:28,160 --> 00:28:32,260
alltså det går, bortsett från namespaces, går det att låsa ner? Låt oss säga att du har
454 00:28:32,760 --> 00:28:34,560
2-3 poddar i samma namespace.
455 00:28:34,820 --> 00:28:36,600
Måste de ha samma
456 00:28:36,860 --> 00:28:37,880
rättigheter om man säger så
457 00:28:38,140 --> 00:28:40,440
med sina tokens eller kan man till och med låsa ner det på?
458 00:28:40,700 --> 00:28:41,220
Yes.
459 00:28:41,480 --> 00:28:44,040
Man låser ner det liksom till minsta bild.
460 00:28:44,340 --> 00:28:45,880
Men det är ju ganska svårt.
461 00:28:46,120 --> 00:28:48,440
Det är ju som allt, det är ju allting går ju och
462 00:28:48,680 --> 00:28:51,760
alla objekt går ju att instrumentera liksom och sätta modeller på.
463 00:28:52,280 --> 00:28:54,060
Men det är svårt så man får försöka
464 00:28:54,320 --> 00:28:55,600
hitta någon, och det är därför då de här
465 00:28:55,860 --> 00:28:59,960
policyobjekten inte är så dumma för de kan ju då hjälpa dig att gruppa inställningar.
466 00:29:00,460 --> 00:29:04,560
Men det viktiga är väl i min erfarenhet är att man faktiskt validerar vad det är som läggs på.
467 00:29:04,820 --> 00:29:07,640
Och oftast då så väljer man någon form utav
468 00:29:08,140 --> 00:29:11,220
alltså någon form utav
469 00:29:11,480 --> 00:29:13,000
tredjepartsbinär eller
470 00:29:14,080 --> 00:29:16,640
projekt för att hjälpa en att bygga då
471 00:29:18,940 --> 00:29:20,740
säkerhetskanaler.
472 00:29:21,000 --> 00:29:24,060
Etablera ett konstrukt för hur man definierar
473 00:29:24,320 --> 00:29:27,140
säker kommunikation mellan poddar till exempel.
474 00:29:27,400 --> 00:29:30,460
Vad får lov att prata med utsidan och hur mountar vi
475 00:29:30,720 --> 00:29:33,020
portar och externa adresser och så vidare och så vidare.
476 00:29:33,280 --> 00:29:38,660
Om man lyfter sig ett steg här då Jesper och säger så här då.
477 00:29:38,920 --> 00:29:42,760
Låt oss säga att jag är ansvarig för säkerheten på ett företag
478 00:29:43,000 --> 00:29:44,040
där vi använder oss av
479 00:29:44,340 --> 00:29:46,380
den här typen av infrastruktur.
480 00:29:46,640 --> 00:29:50,740
Hur ska jag säkerställa att mina utvecklare gör rätt?
481 00:29:51,000 --> 00:29:53,560
Finns det någonting liksom kan jag ha någon
482 00:29:54,580 --> 00:30:00,980
säkerhetspolis som springer runt och kollar så att allt är rätt uppsatt eller vad ska man ta sig för?
483 00:30:01,240 --> 00:30:02,520
Ja det finns ju olika skolor här då.
484 00:30:02,760 --> 00:30:04,040
Till exempel vi pratade
485 00:30:04,300 --> 00:30:07,640
lite innan avsnittet att vi inte skulle lämna de olika cloudleverantörerna.
486 00:30:08,140 --> 00:30:09,160
Men nu gör jag det då.
487 00:30:09,940 --> 00:30:14,040
Använder man AVS så finns det en del projekt i AVS. Man kan sätta upp olika kontroller.
488 00:30:14,340 --> 00:30:16,640
Guard duty eller cloud trail och sådana grejer.
489 00:30:16,900 --> 00:30:18,940
Så det finns lite funktioner då som egentligen
490 00:30:19,200 --> 00:30:21,500
ger dig möjligheten för order trails.
491 00:30:21,760 --> 00:30:27,140
Och kan även se om du gör saker och ting som kanske inte är riktigt som man ska göra.
492 00:30:28,160 --> 00:30:29,440
När man pratar kubinetis
493 00:30:29,700 --> 00:30:35,080
då kommer man ju raskt in på Google och hela Googles cloud infrastruktur som bygger på det här projektet.
494 00:30:35,580 --> 00:30:43,260
De har ju även en misconfiguration scanner inbyggd om man kör i Google’s cloud.
495 00:30:44,080 --> 00:30:50,220
Går den alltså på kubinetis config också? Den går inte bara på hostnivå på Google Cloud?
496 00:30:52,020 --> 00:30:54,060
Precis, den går ner till dina produktionskluster.
497 00:30:54,320 --> 00:31:02,520
Finns det inte i själva bildpipelinen i de verktygen regelsätt många setup som måste checkas av innan du producerar?
498 00:31:02,760 --> 00:31:09,940
Och sen kan man även installera binära ramverk och servicer som gör precis detta.
499 00:31:10,200 --> 00:31:11,480
Löpande säkerhetsgranskning.
500 00:31:11,980 --> 00:31:13,260
Där finns det
501 00:31:13,260 --> 00:31:15,300
Falco i ett stort projekt.
502 00:31:15,560 --> 00:31:17,620
Systig i ett annat projekt
503 00:31:18,120 --> 00:31:20,940
som har blivit upptagna i Cloud Native Computing Foundation.
504 00:31:21,700 --> 00:31:24,020
Sen har vi även Forseti
505 00:31:24,520 --> 00:31:29,900
som egentligen grundades av Spotify om jag inte missminner mig helt fel nu.
506 00:31:30,160 --> 00:31:32,460
Var det inte ett tåk på Sec T?
507 00:31:32,720 --> 00:31:33,740
Ja.
508 00:31:34,000 --> 00:31:35,780
Och det är då
509 00:31:36,300 --> 00:31:37,060
Cloud
510 00:31:37,320 --> 00:31:40,660
det hette någonting annan innan men jag kommer inte ihåg, det hette inte Forseti först.
511 00:31:43,260 --> 00:31:47,860
Men Forseti har utvecklat sig från att vara native kubinetisk till att bli Google Cloud
512 00:31:49,400 --> 00:31:50,680
baserat mer eller mindre.
513 00:31:51,200 --> 00:31:54,780
Men Systig och Falco det passar till det mesta.
514 00:31:55,300 --> 00:31:57,600
Och sen har vi även då
515 00:31:58,100 --> 00:32:00,420
Calico har lite sådana här olika
516 00:32:00,660 --> 00:32:01,700
säkerhets
517 00:32:02,200 --> 00:32:03,480
checkar man kan lägga på.
518 00:32:03,740 --> 00:32:10,660
Men sen finns det AquaSec till exempel. De har skapat en del funktioner som gör att man till exempel kan köra en
519 00:32:11,160 --> 00:32:13,220
audit baserat på
520 00:32:13,520 --> 00:32:19,140
på olika färdiga definitioner. Det vill säga om du har det här så borde du vara sårbar för det här.
521 00:32:19,920 --> 00:32:25,540
Det kan man också köra in mot sin kubinetisk infrastruktur och få någon idé om vad det är som händer.
522 00:32:27,340 --> 00:32:32,980
Så det finns en del säkerhetsprojekt där ute men det bygger oftast på att man måste kunna validera vad som är folks positives eller inte.
523 00:32:33,740 --> 00:32:35,780
Och allting bygger då på
524 00:32:37,320 --> 00:32:41,420
eftersom du har gjort så här så borde det vara så här. Man måste kunna validera vidare
525 00:32:41,680 --> 00:32:42,960
någonting är trasigt eller inte då.
526 00:32:44,020 --> 00:32:48,900
Jag undrar lite på typ cloud leverantörer och sånt där man
527 00:32:49,660 --> 00:32:52,740
där man liksom, man måste ju anta att
528 00:32:54,260 --> 00:32:58,880
poddarna är onda liksom eller containrarna är onda.
529 00:32:59,380 --> 00:33:03,220
Även ens användare
530 00:33:03,740 --> 00:33:09,380
är ju onda då eftersom man bland dem ligger i folk som skulle vilja angripa hostleverantören.
531 00:33:09,880 --> 00:33:10,660
Och
532 00:33:12,180 --> 00:33:13,220
beskrivningen av
533 00:33:13,520 --> 00:33:16,080
containers när man läser den så låter det ju som
534 00:33:16,840 --> 00:33:17,360
alltså
535 00:33:18,380 --> 00:33:21,700
du måste ju kasta bort massa rättigheter och sånt.
536 00:33:22,220 --> 00:33:23,240
Men det
537 00:33:23,500 --> 00:33:26,820
snurrar ju ändå i grunden på samma körnen som
538 00:33:27,600 --> 00:33:28,620
ens hjärn.
539 00:33:29,140 --> 00:33:31,180
Så jag antar att Amazon
540 00:33:31,440 --> 00:33:35,540
och Google och sånt, de måste ju ha någon egen sån här secrets in the sauce liksom.
541 00:33:36,300 --> 00:33:38,340
Vad de gör för att
542 00:33:39,120 --> 00:33:41,940
för att ett kernel-exploit eller någonting liknande inte
543 00:33:41,940 --> 00:33:45,020
skulle kunna detonera från en container och
544 00:33:45,520 --> 00:33:48,860
ta över liksom cloud-leverantörens
545 00:33:49,620 --> 00:33:50,640
riktiga hårdvara.
546 00:33:51,420 --> 00:33:55,000
Precis, och där har vi ju sett historiskt att det har varit separationsproblem.
547 00:33:55,500 --> 00:33:59,340
I alla fall i gcloud så har vi ju haft
548 00:34:00,120 --> 00:34:06,260
i Googles cloud-miljö, där har vi haft problematiken att folk har hittat breakouts alltså
549 00:34:06,520 --> 00:34:07,540
container-breakouts
550 00:34:07,800 --> 00:34:10,860
eller cluster-breakouts som gör att man kommer åt Norderna då.
551 00:34:10,860 --> 00:34:12,660
Och det är ju jättedåligt.
552 00:34:12,900 --> 00:34:18,800
Kubernetes är ju släppt nu så det är ju inte Google längre som är maintainers av Kubernetes utan det är ju ett eget projekt.
553 00:34:19,300 --> 00:34:23,920
Sedan så har ju Googles ekosystem egna funktioner som inte är publika
554 00:34:24,420 --> 00:34:25,960
som arrangerar sina kluster.
555 00:34:26,220 --> 00:34:28,780
Och det är ju sant för Amazon också, precis som du säger.
556 00:34:29,300 --> 00:34:32,100
Och alla de här grejerna har ju stöd för
557 00:34:32,620 --> 00:34:34,420
typ encryption at rest och så vidare.
558 00:34:38,760 --> 00:34:40,300
Jag funderar på om de kör någon,
559 00:34:40,300 --> 00:34:41,320
alltså,
560 00:34:42,600 --> 00:34:43,120
alltså,
561 00:34:44,660 --> 00:34:46,700
det jag funderar på är ju om typ
562 00:34:47,220 --> 00:34:51,820
när man får sitt lilla docker-miljö ute hos en cloud-leverantör, om den i
563 00:34:52,340 --> 00:34:56,420
själva verket då snurrar i någon virtualisering eller någonting som liksom
564 00:34:57,200 --> 00:35:02,060
på något sätt isolerar en hårdare än en standard-container från
565 00:35:02,580 --> 00:35:04,100
från de andra containrarna.
566 00:35:05,900 --> 00:35:06,920
Det känns lite som,
567 00:35:07,940 --> 00:35:09,220
det känns lite vanskligt
568 00:35:09,480 --> 00:35:10,260
att bygga en miljö
569 00:35:10,560 --> 00:35:13,620
där man utgår från att det finns ondska i systemet och sedan låta
570 00:35:14,400 --> 00:35:16,440
alla möjliga köra på samma hårdvara.
571 00:35:18,740 --> 00:35:25,400
Bra exempel på det, det kanske är sex månader sedan där DigitalOcean hade lite otur när man tänkte just på separation i sina kluster.
572 00:35:25,660 --> 00:35:26,180
Då var det ju
573 00:35:26,680 --> 00:35:31,800
möjligt för alla användare att lista saker och ting som inte tillhör deras eget kontext.
574 00:35:32,320 --> 00:35:35,140
Det patchades ju, men det var någonting man inte hade tänkt på.
575 00:35:36,160 --> 00:35:37,440
Så det förekommer absolut.
576 00:35:38,200 --> 00:35:40,260
Absolut. Och det är de ju ganska tydliga.
577 00:35:40,560 --> 00:35:46,440
Tydliga väl då, att det är en delad ansvarsmodell, att vi ansvarar för vissa delar och ni själva ansvarar för den andra delen.
578 00:35:46,700 --> 00:35:48,500
Så det är ju en accepterad risk man gör
579 00:35:49,000 --> 00:35:49,780
när man väljer det här.
580 00:35:51,560 --> 00:35:52,080
Så.
581 00:35:58,740 --> 00:36:03,860
Och då pratar man ju mycket om Zero Trust eller Assume Breach är väldigt nya nu.
582 00:36:04,360 --> 00:36:05,900
Det vill säga att man,
583 00:36:06,160 --> 00:36:08,720
vi antar att vi blir dödade liksom.
584 00:36:08,980 --> 00:36:10,260
Vi antar att folk kommer ta sig ut.
585 00:36:10,560 --> 00:36:10,820
Vi antar att folk kommer ta sig in här.
586 00:36:11,060 --> 00:36:11,840
Vad gör vi då?
587 00:36:12,600 --> 00:36:19,000
Ja just det, då måste vi se till att hålla koll på att det inte är en klassisk perimeter, alltså en insida och en utsida, utan att vi har ett
588 00:36:19,260 --> 00:36:21,820
bra och ett genomtänkt skalskydd där vi har
589 00:36:22,080 --> 00:36:23,360
tänkt igenom
590 00:36:23,620 --> 00:36:26,180
vad det är som konsumerar var, hur vi
591 00:36:27,700 --> 00:36:31,040
bygger och skapar och underhåller våran driftmiljö.
592 00:36:34,620 --> 00:36:37,940
Så egentligen det klassiska liksom, vet vad det är du kör,
593 00:36:38,200 --> 00:36:40,000
kan dina produkter, det är liksom
594 00:36:40,300 --> 00:36:42,340
egentligen samma sak nu som då.
595 00:36:43,380 --> 00:36:44,900
Grejen är att det var svårt
596 00:36:45,160 --> 00:36:49,000
historiskt när du kunde se och ta på din hårdvara eller din infrastruktur.
597 00:36:49,260 --> 00:36:51,820
Nu kan du inte se den längre, nu är det en
598 00:36:52,340 --> 00:36:53,360
konfektion någonstans.
599 00:36:53,620 --> 00:36:58,980
Det är bra vem man frågar, jag menar för oss de som har varit med lite så är det ju en stor skillnad.
600 00:36:59,500 --> 00:37:03,080
Men för de som aldrig har varit med om det andra så är ju det
601 00:37:03,340 --> 00:37:04,360
bara så det funkar.
602 00:37:05,640 --> 00:37:08,460
Jo men det jag menar är att det är mindre synligt nu än tidigare.
603 00:37:08,980 --> 00:37:10,260
Om man inte har varit med om det andra så är det ju bara så det funkar.
604 00:37:10,300 --> 00:37:11,320
Ja både och.
605 00:37:11,580 --> 00:37:16,180
Både för du har ju allting i din terminal egentligen, du behöver liksom aldrig gå in.
606 00:37:16,440 --> 00:37:19,000
Jag kommer ihåg några gånger när jag
607 00:37:20,020 --> 00:37:25,660
gav mig på det här liksom, det här var ju tidigt i min karriär när jag jobbade med mycket nätverk och routrar och sånt där.
608 00:37:25,920 --> 00:37:30,520
Och man hade ju, jag vet inte varför, man hade någon idé om att man skulle göra det här mitt i nätterna.
609 00:37:30,780 --> 00:37:34,100
Trots att man hade liksom, det är ju jättekonstigt, man hade ju såhär,
610 00:37:34,360 --> 00:37:38,460
betalade ju förmögenhet för att ha high availability och liksom
611 00:37:38,980 --> 00:37:40,260
IP-failover.
612 00:37:40,560 --> 00:37:43,880
Man skulle ändå liksom boka servicefönster mitt i natten för att göra detta.
613 00:37:44,140 --> 00:37:46,700
Men det var bara en liten passus.
614 00:37:46,960 --> 00:37:48,740
Men så sitter man där och så gör man fel.
615 00:37:49,260 --> 00:37:51,560
Man klipper av tråden man ansluter till.
616 00:37:52,080 --> 00:37:57,700
Och så bara nej, ja ja, klockan är två på natten eller något. Du får åka in till datahallen och
617 00:37:57,960 --> 00:37:58,980
och fixa det här.
618 00:37:59,240 --> 00:38:03,860
Det behöver man ju inte längre utan det finns ju nästan alltid en out-of-band access då.
619 00:38:04,620 --> 00:38:06,920
Egentligen så det gör ju att man, ja det är liksom,
620 00:38:07,700 --> 00:38:10,260
man har mer kontroll men också mindre insyn.
621 00:38:10,300 --> 00:38:14,140
Men det är ju inte helt rätt för det beror på vilket perspektiv man har från första början.
622 00:38:14,400 --> 00:38:15,160
If that makes sense.
623 00:38:16,440 --> 00:38:19,000
Ja men jag menar egentligen att det är, förr så
624 00:38:19,260 --> 00:38:25,660
du kom inte ifrån den fysiska aspekten så du såg alltid din hårdvara iallafall. Du såg dina enheter.
625 00:38:25,920 --> 00:38:28,740
Nu måste du arbeta för att se dina enheter på ett tydligt sätt.
626 00:38:28,980 --> 00:38:34,360
Alltså om någon spinner upp en ny maskin eller ändrar en regel så är det liksom, det är ett steg till innan du ser det.
627 00:38:35,140 --> 00:38:36,160
Mm, absolut.
628 00:38:36,420 --> 00:38:36,920
Absolut.
629 00:38:37,700 --> 00:38:40,000
Och det här bygger ju, det är det som Johan var inne på då.
630 00:38:40,000 --> 00:38:43,080
Det är ju ganska bra att ha lite checkar, lite QR-checkar,
631 00:38:43,580 --> 00:38:47,420
eller ja säkert checkar också i sin byggpipeline egentligen när man tittar på vad hände nu
632 00:38:47,680 --> 00:38:49,220
och vad vi har koll på.
633 00:38:49,720 --> 00:38:52,800
Man brukar ha ganska bra koll på resursfördelningen för att
634 00:38:53,060 --> 00:38:55,880
idag så har vi ju etablerat en ganska rolig modell och det är ju att
635 00:38:56,120 --> 00:38:58,180
det kostar ju pengar och
636 00:38:58,680 --> 00:39:02,280
att allokera mycket resurser så det är ju folk hyfsat bra på
637 00:39:02,780 --> 00:39:03,560
att hålla koll på.
638 00:39:03,800 --> 00:39:07,640
Men det är ju också en attackvektor i form av cloud-miljöer, det vill säga att man har
639 00:39:07,640 --> 00:39:11,480
resourcenexortion.
640 00:39:11,740 --> 00:39:13,280
Alltså vi
641 00:39:13,520 --> 00:39:18,140
allokerar, vi spinner upp saker så mycket att resurserna på din node tar slut.
642 00:39:18,900 --> 00:39:25,040
Och det är ju väl om man lyckas göra det men det kan ju också vara någonting som man styr över i ett
643 00:39:25,300 --> 00:39:26,320
jammel konstrukt eller så här.
644 00:39:26,580 --> 00:39:29,140
Den här Iocachen får inte dra mer resurser.
645 00:39:30,420 --> 00:39:34,520
Så när man då har nått toppen, ja då kommer den att sluta funka liksom, den kommer vara väldigt belastad.
646 00:39:36,560 --> 00:39:37,600
Och det är också någonting som
647 00:39:37,860 --> 00:39:40,680
man skulle kunna skapa på sin cloud-instans då, det vill säga
648 00:39:40,920 --> 00:39:45,020
vi är verksamma i den här regionen, här har vi valt att köra våra instanser.
649 00:39:45,540 --> 00:39:51,680
Men nu helt plötsligt så spinner du upp nya instanser med massa konstiga EC2-instanser om vi nu kör AVS
650 00:39:51,940 --> 00:39:54,500
i en annan region där vi aldrig har några grejer.
651 00:39:55,000 --> 00:39:55,520
Är det på riktigt?
652 00:39:56,040 --> 00:39:58,600
Och det är ju ganska bra om man då har någon form utav
653 00:39:58,840 --> 00:40:04,220
monitorering och loggning som kan ge dig den informationen att nu händer någonting någonstans där du inte borde göra det.
654 00:40:04,740 --> 00:40:06,520
Och det handlar om att man tydligt definierar var
655 00:40:06,780 --> 00:40:07,560
infrastrukturen bör vara.
656 00:40:07,860 --> 00:40:08,360
Börjar och slutar.
657 00:40:09,900 --> 00:40:11,440
En annan sak jag tänkte på, det är ju
658 00:40:11,700 --> 00:40:16,820
de här containrarna då, de är ju ofta tänkt att det ska vara immutable grejer, det vill säga
659 00:40:17,080 --> 00:40:19,640
du ska inte in och ändra på dem när de kör utan du ändrar
660 00:40:20,140 --> 00:40:23,220
i dina byggen i så fall och så kastar du bort den och då kommer en ny i fin
661 00:40:23,480 --> 00:40:25,780
som har den nya funktionaliteten istället.
662 00:40:26,280 --> 00:40:27,060
Absolut!
663 00:40:27,320 --> 00:40:30,380
Och med det tänket, om den nu är immutable
664 00:40:30,640 --> 00:40:33,200
då känns det som en väldigt bra
665 00:40:33,460 --> 00:40:36,280
mitigerande åtgärd är att det är
666 00:40:36,280 --> 00:40:40,120
read-only, alltså de får inte skriva att det är disk överhuvudtaget.
667 00:40:40,640 --> 00:40:42,680
Så kan det ju vara.
668 00:40:43,200 --> 00:40:44,480
Har du någon tjänst som du
669 00:40:44,720 --> 00:40:46,000
säger att det här är ett bra exempel?
670 00:40:48,060 --> 00:40:50,100
Vad som helst, tycker jag.
671 00:40:50,360 --> 00:40:56,760
Om du tänker immutable eller stateless, då ska du inte spara någon information lokalt i vilket fall som helst, så då borde det vara helt okej.
672 00:40:57,020 --> 00:41:03,420
Och du tar ju bort den här remote code execution du pratade om, där du kan faktiskt installera ny mjukvara.
673 00:41:03,680 --> 00:41:06,240
Mm, men då gäller det att man härdar den runtime.
674 00:41:06,540 --> 00:41:12,940
Det vill säga, är det ett linux-skal så är det ju ett linux-skal. Då har du ju netcat, du har veget oftast, du har ju
675 00:41:13,440 --> 00:41:18,560
massa kommandon som du skulle kunna stacka för att skapa dig någon form av idé.
676 00:41:18,820 --> 00:41:21,640
Typ avk kan man göra käll med, om man vill.
677 00:41:22,160 --> 00:41:23,940
Alltså det är liksom,
678 00:41:24,200 --> 00:41:29,580
visst att man inte får, att det bara är read-only, det brukar sällan vara ett hinder för då har man antingen
679 00:41:30,080 --> 00:41:31,880
möjlighet att lagra någonting i minne kanske.
680 00:41:32,140 --> 00:41:35,720
Eller så har man möjlighet att ansluta till någonting annat.
681 00:41:36,280 --> 00:41:42,420
Du pratade ju om att plocka via internet, men har du kommit åt ett skala eller så, så
682 00:41:43,200 --> 00:41:44,980
det är ju lite segt, men du
683 00:41:45,240 --> 00:41:49,340
kan ju egentligen pejsta in binära via base64 och sen…
684 00:41:49,600 --> 00:41:53,940
Ja, eller använda netcat och bara skapa ett hål direkt.
685 00:41:54,200 --> 00:41:56,000
Om inte egressfiltering är igång då.
686 00:41:56,760 --> 00:42:02,900
Minnet tänkte jag faktiskt inte det på, att du skulle kunna köra det i minnet faktiskt, det skulle du kunna göra.
687 00:42:03,160 --> 00:42:05,720
Så man kan göra mycket konstiga saker alltså.
688 00:42:05,720 --> 00:42:07,760
Det är en svår värld.
689 00:42:08,020 --> 00:42:09,820
Och man måste…
690 00:42:10,080 --> 00:42:11,860
Separation är viktigt, men framförallt
691 00:42:12,380 --> 00:42:13,660
förstå vad det är man håller på med.
692 00:42:13,920 --> 00:42:14,940
Det är det absolut viktigaste.
693 00:42:16,220 --> 00:42:17,500
Det är ett bra tips.
694 00:42:18,000 --> 00:42:19,540
En generell sanning.
695 00:42:20,320 --> 00:42:24,660
Men det är ju också lätt att säga, för det är en svår värld.
696 00:42:24,920 --> 00:42:27,220
Där man tittar på kod.
697 00:42:27,740 --> 00:42:33,120
Jag vet inte om det var Peter som sa det, bara det parsar så gör det ju det liksom, då får man inga fel.
698 00:42:33,620 --> 00:42:35,420
Då kör man ju oftast.
699 00:42:35,720 --> 00:42:42,880
Men vad man också kan säga, det är ju att den gemensamma plattan måste ju vara sund också.
700 00:42:43,400 --> 00:42:51,600
Vi hade ju de här runc-exploitet som var om det var förra eller förrförra året.
701 00:42:51,840 --> 00:42:59,780
Då man kunde ta över massa Unix-system gärna om docker-containern var startad av rot.
702 00:43:00,040 --> 00:43:05,160
För då kunde den hitta fildeskripton till sin egen binär och så kunde den skriva över runc.
703 00:43:05,720 --> 00:43:13,400
Med ond exploit-kod och vid nästa docker omstart så började ens exploit exekvera.
704 00:43:13,660 --> 00:43:21,840
Sedan hade vi den här Windows-specifika docker-desktop som jag försökte prata om på förra gången vi hade.
705 00:43:22,100 --> 00:43:27,220
Där jag kände att jag kanske inte var expert på hur docker hängde ihop i Windows.
706 00:43:27,480 --> 00:43:30,040
Jag kan rätt lite om sådant här överhuvudtaget.
707 00:43:30,560 --> 00:43:35,420
Men så själva den varianten av container-exekveringsmiljön.
708 00:43:35,720 --> 00:43:39,300
Du har om det är docker eller om det är något annat.
709 00:43:39,560 --> 00:43:43,400
Den i sig kan ju ha sårbarheter.
710 00:43:44,420 --> 00:43:52,620
Får du snacka med syskörnen eller körnen uppe i det riktiga systemet.
711 00:43:52,880 --> 00:44:05,680
Så kan du potentiellt angripa med alla kernel exploits om du inte blockar access till de syskålen som är sårbara.
712 00:44:05,720 --> 00:44:17,760
Vi pratade ju om kernelnivå och det här var väl också någon symlänkhistoria där man inte hade riktigt koll på hur man mappade symlänkar till processer och så vidare.
713 00:44:18,000 --> 00:44:19,280
Då kunde man ju lura det här.
714 00:44:19,540 --> 00:44:32,860
Vi har ju pratat om det här så mycket. Allting gammalt är nytt igen för det handlar ju om tidiga Linux-prigväskar eller konstig logik som oftast inte är så känd.
715 00:44:33,620 --> 00:44:35,420
Så det är mycket magi man kan göra.
716 00:44:35,720 --> 00:44:38,800
Genom att vara bra på Linux-syntax.
717 00:44:39,300 --> 00:44:50,060
Men är containers väsentligen en väldigt mycket coolare version av de gamla Cheroot-gailen?
718 00:44:50,320 --> 00:44:54,660
Vad är den stora skillnaden mellan en container och en Cheroot?
719 00:44:55,180 --> 00:45:03,880
Det är väl egentligen bara att vi kan lägga på virtuella kommunikationslager och vi kan lägga på mer funktionalitet än vad vi kunde göra tidigare.
720 00:45:04,140 --> 00:45:05,680
Det finns mycket mer infrastruktur.
721 00:45:05,980 --> 00:45:07,520
Det är mycket bättre.
722 00:45:08,020 --> 00:45:16,980
Det du nu säger om orkestrering så är det egentligen det. Vi har en dirigent som kan hålla på och säga till massa grejer som ska hända så den har en massa arbete att plocka in.
723 00:45:17,500 --> 00:45:23,900
Sen är väl isoleringen oändligt mycket bättre i moderna container jämfört med Cheroot för att det var väl
724 00:45:24,400 --> 00:45:27,220
ganska lätt om inte jag minns fel att ta sig ur Cherootet.
725 00:45:27,480 --> 00:45:30,040
Du kunde länka till en massa olika saker.
726 00:45:30,300 --> 00:45:33,120
Cheroot är ju tänkt…
727 00:45:34,400 --> 00:45:35,680
Cheroot var ju bara till…
728 00:45:35,980 --> 00:45:38,540
för att testa din miljö.
729 00:45:38,800 --> 00:45:45,200
En del använder ju dock för att testa sina byggkedjor och sånt.
730 00:45:45,960 --> 00:45:49,800
Alltså bara att man har en reproducerbar tommiljö som man startar upp.
731 00:45:50,320 --> 00:45:52,880
Och så bygger man i den och så kör man och det var det
732 00:45:53,120 --> 00:45:54,160
som Cheroot
733 00:45:54,400 --> 00:45:55,940
eller Cheroot
734 00:45:56,200 --> 00:45:57,220
kom till för.
735 00:45:57,740 --> 00:46:00,300
Och Cheroot gör ju liksom
736 00:46:00,800 --> 00:46:02,340
den gör ju bara
737 00:46:02,340 --> 00:46:10,020
ett Cheroot-gejl låser ju bara just ner hur
738 00:46:11,040 --> 00:46:13,600
hur du kan röra dig i filsystemet och
739 00:46:14,120 --> 00:46:16,420
det finns massa caveats där att du måste
740 00:46:16,940 --> 00:46:23,340
du måste till exempel efter att du har skapat Cheroot-gejl så är det väldigt viktigt att du gör CD in i gejlet för annars så är
741 00:46:24,100 --> 00:46:25,900
Current Directory
742 00:46:28,200 --> 00:46:30,240
Current Directory-pekaren är inte
743 00:46:30,240 --> 00:46:33,560
inte fångad av låset och så
744 00:46:33,820 --> 00:46:35,360
måste du släppa alla
745 00:46:35,620 --> 00:46:38,680
alla referenser du har till den riktiga världen utanför.
746 00:46:39,200 --> 00:46:43,300
Och det är ju inte helt olikt det här Run CS-hålet att den hade en
747 00:46:43,800 --> 00:46:47,640
en pekare till sig själv och därför kunde man via den pekaren skriva
748 00:46:48,160 --> 00:46:49,440
skriva över huvudbinären.
749 00:46:50,200 --> 00:46:54,820
Jag tror även att hade du bara rättigheter så kan du skriva över Cherootet.
750 00:46:55,080 --> 00:46:55,840
Alltså det finns…
751 00:46:57,120 --> 00:46:58,660
Ja men där finns ju…
752 00:46:58,660 --> 00:47:04,300
Ja men då har du ju Capability Drops, att du kastar bort rättigheten att pilla med Cheroot.
753 00:47:05,580 --> 00:47:07,360
Så det är ju väsentligen…
754 00:47:08,380 --> 00:47:11,720
Det ger stor skillnad men det är ju en vidareutveckling, det kommer ju utifrån
755 00:47:12,220 --> 00:47:13,000
en idé liksom.
756 00:47:13,260 --> 00:47:18,120
Men det här, jag tror bara vi har sett början av det här i och med att vi
757 00:47:19,140 --> 00:47:22,220
vi står inför en
758 00:47:22,460 --> 00:47:25,800
ett skifte där vi numera
759 00:47:26,060 --> 00:47:27,080
använder
760 00:47:27,340 --> 00:47:28,360
oss av infrastruktur som går.
761 00:47:28,660 --> 00:47:30,460
En kod på allt högre…
762 00:47:30,960 --> 00:47:35,320
I allt större utsträckning är väl det ordet jag letar efter.
763 00:47:35,580 --> 00:47:38,140
Så det kommer ju bli mer liksom.
764 00:47:38,380 --> 00:47:38,900
Såklart.
765 00:47:40,940 --> 00:47:41,460
Det här.
766 00:47:41,720 --> 00:47:42,480
Det kommer utvecklas.
767 00:47:43,260 --> 00:47:47,340
Men det kommer ju också säkerheten och allting runt omkring också göra.
768 00:47:47,860 --> 00:47:48,880
Det är…
769 00:47:49,900 --> 00:47:50,940
För liksom…
770 00:47:51,440 --> 00:47:53,500
Runda av lite kanske, så är det ju…
771 00:47:54,520 --> 00:47:58,620
Vad ska man tänka på? Ja, håll koll på vad som får lov att prata med varandra.
772 00:47:58,660 --> 00:48:01,740
I din infrastruktur, alltså i din…
773 00:48:01,980 --> 00:48:05,320
Ja, i din kubinetisk kluster eller i din orkestrering egentligen.
774 00:48:05,820 --> 00:48:10,940
Se till att löpande validera och ordita.
775 00:48:11,200 --> 00:48:13,760
Med hjälp utav verktyg men också med hjälp utav
776 00:48:14,280 --> 00:48:17,100
faktiska penetrationstester eller konfigurationsreviews.
777 00:48:17,600 --> 00:48:19,400
Se till att du hänger med.
778 00:48:19,900 --> 00:48:24,780
Det vill säga att någon är ansvarig för kubinetisk kluster. Se till att någon hänger med och omvärldsbevakar.
779 00:48:25,020 --> 00:48:27,840
Kubernetes repository till exempel.
780 00:48:27,840 --> 00:48:31,160
Håller koll på alla buggar och säkerhetsproblem som är där.
781 00:48:31,420 --> 00:48:37,560
Och se till att validera din konfiguration, inte bara att den funkar. Validera att den är så som du har tänkt att det borde vara.
782 00:48:38,080 --> 00:48:39,360
Det är väl egentligen det som är…
783 00:48:39,620 --> 00:48:45,760
Är det viktigt att det är säkert så måste du hålla på och läsa på listor om hur man säkrar det för att…
784 00:48:46,520 --> 00:48:47,300
Det är liksom…
785 00:48:48,320 --> 00:48:49,340
Och det är ju komplicerat.
786 00:48:49,600 --> 00:48:50,360
Det är svårt.
787 00:48:50,620 --> 00:48:57,800
Det är väl grundproblematiken här för jag menar de som sitter och jobbar med detta, de fokar fullt och hårt på…
788 00:48:58,060 --> 00:48:58,560
Funktion.
789 00:48:58,820 --> 00:49:03,680
Och sitter och har helt andra metrics än att bygga det här säkert.
790 00:49:04,200 --> 00:49:07,280
Ja så kan det vara. Eller så blir det åt andra hållet och då blir det inte användbart.
791 00:49:07,780 --> 00:49:09,060
Det är väl det här problemet.
792 00:49:09,320 --> 00:49:10,340
Den eviga avvägningen.
793 00:49:11,120 --> 00:49:14,180
Ja alltså vi nämnde ju sen…
794 00:49:14,440 --> 00:49:17,000
DevOps och sånt innan men…
795 00:49:17,520 --> 00:49:20,080
För det är ju en intressant skillnad. Eller om man ska säga att…
796 00:49:20,320 --> 00:49:22,640
Förr så brukade du ju ha någon som…
797 00:49:23,140 --> 00:49:27,500
Satt upp burkarna och sen så satt det ledsna människor och inte var nöjda med att de inte kunde göra något.
798 00:49:27,800 --> 00:49:28,820
Att göra saker.
799 00:49:29,600 --> 00:49:34,460
Men nu är man väl gemensamt överens om vad som ska stå i de här manifesten och…
800 00:49:35,220 --> 00:49:36,000
Och sådär liksom.
801 00:49:36,500 --> 00:49:37,280
Den bästa av världen.
802 00:49:38,040 --> 00:49:39,060
Men så är det ju.
803 00:49:39,840 --> 00:49:45,720
Det här är ju någonting man kan prata i oändlighet till men jag tror att vi har fått en liten inblick i alla fall med det här avsnittet.
804 00:49:45,980 --> 00:49:50,320
Jag tror att vi kommer komma tillbaka till det här vid ett senare tillfälle med kanske…
805 00:49:50,580 --> 00:49:54,420
Ännu fler konkreta exempel på när det har gått dåligt där ute i den vida världen.
806 00:49:55,200 --> 00:49:57,760
För det brukar vi ju göra då och då i våra nyheter.
807 00:49:57,800 --> 00:50:01,380
Det finns ju någon kul…
808 00:50:02,660 --> 00:50:07,020
Jag för mig att det är någon av dem du känner från Cure som…
809 00:50:07,520 --> 00:50:10,340
Som la upp någon video om hur han hade…
810 00:50:10,860 --> 00:50:15,200
Hittat en breakout i Googles tjänster där han…
811 00:50:15,980 --> 00:50:20,080
Kunde hoppa från någon typ av Google-användare till att han…
812 00:50:20,580 --> 00:50:24,420
Kunde se åtminstone allting som låg i sin egen miljö.
813 00:50:24,420 --> 00:50:28,260
Ja absolut. Det var ju en Nord-breakout förra året tror jag.
814 00:50:28,520 --> 00:50:31,580
Som dokumenterades. Jag kommer inte ihåg vad sårbarheten var och vad den hette.
815 00:50:31,840 --> 00:50:34,140
CVN. Men det patchades ju ögonaböj kan man säga.
816 00:50:34,400 --> 00:50:35,680
Ja det känns ju rimligt.
817 00:50:36,200 --> 00:50:36,960
Men det går nog att googla upp.
818 00:50:37,480 --> 00:50:41,580
Men med de orden mina vänner så tror jag att det är dags att runda av för den här gången.
819 00:50:41,820 --> 00:50:42,600
Yes!
820 00:50:42,860 --> 00:50:46,940
Jag vet inte vad som är sagt om sommaruppehåll och så vidare men det märker vi om det kommer ut några avsnitt.
821 00:50:47,980 --> 00:50:50,780
Vi ska väl få till ett sommaravsnitt förhoppningsvis.
822 00:50:51,040 --> 00:50:51,560
Mm.
823 00:50:52,320 --> 00:50:53,600
Ja det var trevligt.
824 00:50:53,600 --> 00:50:54,620
Nåväl.
825 00:50:55,140 --> 00:50:59,480
Vi tackar för oss för den här gången. Jag som pratade hette Johan Rubén Möller. Med mig hade jag Jesper Larsson.
826 00:50:59,740 --> 00:51:00,520
Yes sir!
827 00:51:00,760 --> 00:51:01,540
Rickard Botfors.
828 00:51:02,040 --> 00:51:04,360
Trying to break out of a shrewd jail.
829 00:51:04,600 --> 00:51:05,640
Peter Magnusson.
830 00:51:05,880 --> 00:51:06,920
Capabilities drop.
831 00:51:07,680 --> 00:51:08,700
Och Mattias Idag.
832 00:51:09,220 --> 00:51:11,000
Ännu ett abstraktionslagar.
833 00:51:11,520 --> 00:51:12,540
Tack så mycket! Ha det gött!
834 00:51:12,800 --> 00:51:14,840
Ha det gött! Hej då!