You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

315 lines
10 KiB
HTML

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Rechtetrennung in modernen Betriebssystemen</title>
<link rel="stylesheet" href="../reveal.js-4.3.1/dist/reset.css">
<link rel="stylesheet" href="../reveal.js-4.3.1/dist/reveal.css">
<link rel="stylesheet" href="../reveal.js-4.3.1/dist/theme/serif.css">
<!-- Theme used for syntax highlighted code -->
<link rel="stylesheet" href="../reveal.js-4.3.1/plugin/highlight/monokai.css">
</head>
<body>
<div class="reveal">
<div class="slides">
<!-- begin slides -->
<section>
<h3>Gemeinsames Sorgerecht</h3>
<img class="stretch plain" src="res/cerberus-puppy.png" />
<h4>Ein Überblick über Rechtetrennung in modernen Betriebssystemen</h4>
<p>
<small>CC-BY-SA 2018-02-06 Helix/RaumZeitLabor</small>
</p>
</section>
<section>
<h3>Agenda</h3>
<ul class="fragment">
<li>warum braucht man Rechte?</li>
<li class="fragment">Rechtetrennung in Unix</li>
<li class="fragment">Erweiterungen in GNU/Linux</li>
<li class="fragment">Rechtetrennung in Windows</li>
<li class="fragment">Grenzen und Lücken.</li>
</ul>
</section>
<section><!-- what -->
<section>
<h4>Warum braucht man überhaupt</h4>
<h3>Rechte?</h3>
</section>
<section>
<h3>Authentifizierung vs. Autorisierung</h3>
</section>
<section>
<h3>Subjekte und Objekte</h3>
<ul>
<li class="fragment">Subjekte greifen auf Objekte zu</li>
<li class="fragment">Nicht jedes Subjekt darf jedes Objekt benutzen</li>
<li class="fragment">Böse Subjekte schon gar nicht.</li>
</ul>
</section>
<section>
<h3>Beispiele</h3>
<ul class="fragment">
<li>Subjekte:
<ul>
<li class="fragment">Prozesse</li>
</ul>
</li>
<br />
<li class="fragment">Objekte:
<ul>
<li class="fragment">Dateien</li>
<li class="fragment">Ordner</li>
<li class="fragment">Sockets</li>
<li class="fragment">Prozesse</li>
<li class="fragment">virtueller Speicher.</li>
</ul>
</li>
</ul>
</section>
</section><!-- /what -->
<section><!-- Unix -->
<section>
<h4>Rechtetrennung in</h4>
<h3>Unix / POSIX</h3>
</section>
<section>
<h3>Benutzer und Gruppen</h3>
<ul>
<li class="fragment">Besitzer (u)</li>
<li class="fragment">Gruppe (g)</li>
<li class="fragment">Andere (o)</li>
<li class="fragment">Alle (a).</li>
</ul>
</section>
<section>
<h3>Dateirechte</h3>
<div class="fragment">
<p>Bei jeder Datei:</p>
<code>u g o a</code>
</div>
<div class="fragment">
<p>und für jedes Besitzverhältnis</p>
<code>r w x</code>
</div>
</section>
<section>
<h3>Oktale Notation</h3>
<ul class="fragment">
<li>r = 4</li>
<li>w = 2</li>
<li>x = 1</li>
</ul>
<div class="fragment">
<p>Ausrechnen:</p>
<ul>
<li class="fragment">r + x<span class="fragment"> = 4 + 1</span><span class="fragment"> = 5</span></li>
<li class="fragment">r + w<span class="fragment"> = 6</span></li>
<li class="fragment">r + w + x<span class="fragment"> = 7</span></li>
<li class="fragment">w + x<span class="fragment"> = 3.</span></li>
</ul>
</div>
</section>
<section>
<h3>Oktal notierte Dateirechte</h3>
<pre class="fragment"><code>% ls -l datei.txt
-rw-rw-r--. 1 helix helix 0 5. Feb 19:17 datei.txt
<div class="fragment">% chmod 777 datei.txt</div>
<div class="fragment">% ls -l datei.txt
-rwxrwxrwx. 1 helix helix 0 5. Feb 19:17 datei.txt</span>
</code></pre>
</section>
<section>
<h3>Berechtigungen ändern</h3>
<ul>
<li class="fragment">Der Besitzer darf das, Gruppen nicht</li>
<li class="fragment">Root darf eh alles.</li>
</ul>
</section>
<section>
<h3>ACLs</h3>
<ul>
<li class="fragment">pro Benutzer (u)</li>
<li class="fragment">pro Gruppe (g)</li>
<li class="fragment">Rechtemaske (m)</li>
<li class="fragment">Benutzer, die nicht in Gruppen oder ACL sind (o).</li>
</ul>
</section>
</section> <!-- /Unix -->
<section><!-- Linux -->
<section>
<h4>Erweiterungen in</h4>
<h3>GNU/Linux</h3>
</section>
<section>
<h3>Capabilities (Fähigkeiten)</h3>
<ul class="fragment">
<li>mit seccomp-Erweiterung verfügbar</li>
<li class="fragment">derzeit 35 Stück im Linux-Kernel</li>
<li class="fragment">Beispiele: <br />chown, setuid, setgid, net_raw, net_bind_service, …</li>
<li class="fragment">fallenlassen möglich und erwünscht.</li>
</ul>
</section>
<section>
<h3>Namespaces</h3>
<ul class="fragment">
<li>Leichtgewichtige Prozess-Virtualisierung</li>
<li class="fragment">Isolierung: Ein Prozess hat eine andere Sicht auf das System</li>
<li class="fragment">Kein Hypervisor (wie bei VMs)</li>
<li class="fragment">Besonders nützlich: netns / veth</li>
<li class="fragment">Weitere Namespaces: PID, <abbr title="UNIX Timesharing System">UTS</abbr> (hostname), Mount, user.</li>
</ul>
</section>
<section>
<h3>Control Groups</h3>
<ul class="fragment">
<li>regeln den Zugriff auf Systemressourcen</li>
<li class="fragment">Implementieren Möglichkeiten zur Steuerung der Auslastung</li>
<li class="fragment">RAM, CPU, Netzwerkprioritäten, Geräte, etc.</li>
</ul>
</section>
<section>
<h3>Mandatory Access Controls</h3>
<p class="fragment">Geben jedem Benutzer und jeder Gruppe einen Kontext und Freigaben für ihre Arbeit mit "Regeln".</p>
<h4 class="fragment">Beispiele:</h4>
<ul class="fragment">
<li>SELinux</li>
<li>AppArmor</li>
<li>Smack</li>
<li>TOMOYO</li>
</ul>
<p class="fragment">Die meisten Systeme nutzen Linux Security Modules im Kernel.</p>
</section>
<section>
<h4>Übersicht über das Rechtemodell in GNU/Linux</h4>
<img class="stretch plain" src="res/lin-access-controls.png" />
</section>
<section>
<h3>MAC vs. <abbr title="Discretionary Access Control">DAC</abbr>, <abbr title="Role-Based Access Control">RBAC</abbr></h3>
</section>
<section>
<h3>Was kann man damit machen?</h3>
<ul class="fragment">
<li>Sandbox (chroot, firejail)</li>
<li class="fragment">Container (<abbr title="Linux Containers">LXC</abbr>, Docker)</li>
<li class="fragment">VMs (VirtualBox, VMWare, KVM).</li>
</ul>
</section>
</section><!-- /Linux -->
<section><!-- Windows -->
<section>
<h4>Natürlich gibt es Rechtetrennung auch in</h4>
<h3>Windows</h3>
</section>
<section>
<h3>Das Dateisystem</h3>
<ul class="fragment">
<li>i.d.R. NTFS</li>
<li class="fragment">hat auch Benutzer, Gruppen</li>
<li class="fragment">POSIX-Modus</li>
<li class="fragment">und ACLs.</li>
</ul>
</section>
<section>
<h3>Verwirrende Grafik aus einem <abbr title="Windows internals">Buch</abbr></h3>
<img class="stretch plain" src="res/win-access-controls.svg" />
</section>
<section>
<h3>Die wichtigsten Komponenten</h3>
<ul class="fragment">
<li><abbr title="Security Reference Monitor">SRM</abbr> Security checks</li>
<li class="fragment"><abbr title="Local Security Authority Subsystem">LSASS</abbr>/<abbr title="Local Security Authority Service">LSASRV</abbr> lokale System-Sicherheitsrichtlinienverwaltung</li>
<li class="fragment"><abbr title="Security Accounts Manager">SAM</abbr> Service/DB mit Benutzer- und Gruppendaten</li>
<li class="fragment">HAL, <abbr title="Kernel Security Device Driver">KSecDD</abbr> Hardware-Abstraktion</li>
<li class="fragment">AppLocker MAC.</li>
</ul>
</section>
<section>
<h3>Kommunikation der Komponenten</h3>
<img class="stretch plain" src="res/win-mac-communication.svg" />
</section>
<section>
<h3>Benutzerkontensteuerung</h3>
<img class="stretch plain" src="res/uac.png" />
</section>
</section><!-- /Windows -->
<section><!-- pitfalls -->
<h3>Gegen was Rechtemanagement <strong>nicht</strong> hilft</h3>
<ul class="fragment">
<li>Kernel-Bugs (ring0)</li>
<li class="fragment">Fehler im Rechtemanagement (Bugs/Konfiguration)</li>
<li class="fragment">Hardware-Bugs</li>
<li class="fragment">verwanzte Hardware</li>
<li class="fragment"><strong>BENUTZER</strong>.</li>
</ul>
</section><!-- /pitfalls -->
<section><!-- sources -->
<h4>Quellen</h4>
<small>
<ul>
<li><a href="https://akreon.deviantart.com/art/Cerberus-puppy-684305376">Kerberos akreon (DeviantArt)</a></li>
<li><a href="https://www.nccgroup.trust/globalassets/our-research/us/whitepapers/2016/april/ncc_group_understanding_hardening_linux_containers-1-1.pdf">Understanding and Hardening Linux Containers (NCC Group Whitepaper)</a></li>
<li><a href="http://materias.fi.uba.ar/7508/WI6/Windows%20Internals%20Part%201%20(6th%20Edition).pdf">Windows Internals Part 1 (6th Edition)</a></li>
<li><a href="https://www.slideshare.net/kaigai/label-based-mandatory-access-control-on-postgresql">Label based Mandatory Access Control on PostgreSQL (PGcon2011, Kohei KaiGai)</a></li>
</ul>
</small>
<hr />
<h3>Danke für's Zuhören!</h3>
</section><!-- /sources -->
<!-- end slides -->
</div>
</div>
<script src="../reveal.js-4.3.1/dist/reveal.js"></script>
<script src="../reveal.js-4.3.1/plugin/notes/notes.js"></script>
<script src="../reveal.js-4.3.1/plugin/markdown/markdown.js"></script>
<script src="../reveal.js-4.3.1/plugin/highlight/highlight.js"></script>
<script>
// More info about initialization & config:
// - https://revealjs.com/initialization/
// - https://revealjs.com/config/
Reveal.initialize({
hash: true,
// Learn about plugins: https://revealjs.com/plugins/
plugins: [ RevealMarkdown, RevealHighlight, RevealNotes ]
});
</script>
</body>
</html>