Talks/rechteverwaltung/slides.html
Helix 385259e787 initial commit
Add all of the initial presentations from my presentations folder. These are mostly the versions of the talks I actually presented in the RaumZeitLabor, but with updated reveal.js version as a submodule.

In the future this needs to be touched up and properly exported to a website so I can link this more easily. For now this should suffice.
2022-09-02 22:53:50 +02:00

314 lines
10 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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