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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!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>