Symlink-Angriffe: Wenn A -> B folgt B == A? by maini

View this thread on steempeak.com
· @maini ·
$0.29
Symlink-Angriffe: Wenn A -> B folgt B == A?
![window941625_1920.jpg](https://files.steempeak.com/file/steempeak/maini/ZJqZL9b0-window-941625_1920.jpg)
Um Daten über die Programmlaufzeit hinaus zu behalten, werden diese oft in Dateien gespeichert. Doch was sind überhaupt Dateien und wie interagiert ein Programm mit einer solchen?

---
# Dateien - oder File Descriptors?
> The UNIX philosophy is often quoted as "everything is a file", but that
really means "everything is a stream of bytes". [Linus Torvalds, [fa.linux.kernel mailing list](https://yarchive.net/comp/linux/everything_is_file.html)]

Wenn von Dateien gesprochen wird, muss grundsätzlich zwischen den Dateien selbst (Abstraktion von Nullen und Einsen auf einer Festplatte) und File Descriptors unterschieden werden.
Wenn ein Programm auf eine Datei zugreifen möchte (sei es lesend oder schreibend), muss dieses einen "Handler" oder "Zeiger" auf die Datei anfordern. An diesen "Zeiger" können nun Daten gesendet, oder von diesem gelesen werden. Solch ein "Zeiger" auf eine offene Datei wird unter Linux als File Descriptor bezeichnet und dem Prozess vom Betriebssystem (dem Linux Kernel) übergeben.
# Symlinks
Ein Symlink ist eine Datei, die auf eine andere Datei zeigt (eine Verknüpfung). In der Regel kann jeder Nutzer des Systems kann einen Symlink auf eine andere Datei erstellen.

---
# (Ein einfacher) Symlink-Angriff
Hierfür habe ich einen kleines Beispiel-Programm erstellt. Dieses schreibt zum Start und Ende in eine Log-Datei. Weiterhin wird Nutzer-Input gelesen und ebenfalls in die Log-Datei geschrieben.
```
#include <iostream>
#include <fstream>
#include <string>

int main(){
    // Opening procedure
    std::ofstream file;
    file.open("logfile.txt");

    // Initialize logic
    file << "Daemon initialized\n";
    std::string input;
    for (int i = 0; i < 10; i++){
        std::cout << "Write something: ";
        std::getline(std::cin, input);
        file << input;
    }

    // Closing procedure 
    file << "Daemon stopped. Have a nice day!\n";
    file.close();
    return 0;
}
```
Das Programm wird nun übersetzt und ein erster Testlauf gestartet:
>g++ -Wall -o daemon daemon.cpp
>./daemon
Write something: Lorem ipsum
...

![RegularExec.png](https://files.steempeak.com/file/steempeak/maini/AAkEUePA-RegularExec.png)

Wenn wir nun die Datei logfile.txt betrachten, so steht (wenig überraschend) unter anderem unser Text in der Datei.

Nun erstellen wir (in unserem Fall bevor logfile.txt und der File Descriptor darauf existiert, allerdings gibt es auch andere, prominentere Symlink-Angriffe auf Basis von Race Conditions) einen Symlink namens logfile.txt, der auf die Datei passwd zeigt:
>rm logfile.txt
>touch passwd
>ln -s passwd logfile.txt

Wenn daemon nun nach logfile.txt schreibt, schreibt er stattdessen nach passwd. Sollte daemon nun mit höheren Privilegien (z.B. als root-Nutzer) laufen, könnten wir beliebige Zeichenfolgen auch in Konfigurations- und Systemdateien (auf die root hier ja Zugriff hat) schreiben.

![SymlinkExec.png](https://files.steempeak.com/file/steempeak/maini/qHFxQ49u-SymlinkExec.png)

---
# Schutzmaßnahmen
Auf einigen Distributionen (hier [Ubuntu](https://wiki.ubuntu.com/Security/Features#symlink)) folgen Prozesse keinen Symlinks in offene Ordner wie /tmp, falls diese von einem anderen (weniger privilegierten) User erstellt wurden.
👍  , , , , , , , , , ,
properties (23)
post_id85,273,334
authormaini
permlinksymlink-angriffe-wenn-a-b-folgt-b-a
categorydeutsch
json_metadata{"app":"steempeak\/2020.03.6","format":"markdown","tags":["deutsch","steemstem","de-stem","linux","palnet","stem"],"links":["https:\/\/yarchive.net\/comp\/linux\/everything_is_file.html","https:\/\/wiki.ubuntu.com\/Security\/Features#symlink"],"image":["https:\/\/files.steempeak.com\/file\/steempeak\/maini\/ZJqZL9b0-window-941625_1920.jpg","https:\/\/files.steempeak.com\/file\/steempeak\/maini\/AAkEUePA-RegularExec.png","https:\/\/files.steempeak.com\/file\/steempeak\/maini\/qHFxQ49u-SymlinkExec.png"]}
created2020-03-18 00:02:36
last_update2020-03-18 00:02:36
depth0
children1
net_rshares1,664,900,140,416
last_payout2020-03-25 00:02:36
cashout_time1969-12-31 23:59:59
total_payout_value0.145 SBD
curator_payout_value0.145 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length3,323
author_reputation2,563,828,015,694
root_title"Symlink-Angriffe: Wenn A -> B folgt B == A?"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
author_curate_reward""
vote details (11)
@florianopolis ·
He said, ***'Stop doing wrong things and turn back to God! The kingdom of heaven is almost here.***'(Matthew 3:2) 
##  *Bro. Eli Challenges Atheism Belief, There is No God*
Watch the Video below to know the Answer...
***(Sorry for sending this comment. We are not looking for our self profit, our intentions is to preach the words of God in any means possible.)***
https://youtu.be/QqkuNRO4Bt4
Comment what you understand of our Youtube Video to receive our full votes. We have 30,000 #SteemPower. It's our little way to **Thank you, our beloved friend.**  
Check our [Discord Chat](https://discord.gg/vzHFNd6) 
Join our Official Community: https://steemit.com/created/hive-182074
👍  
properties (23)
post_id85,273,466
authorflorianopolis
permlinkxxak8akdyb
categorydeutsch
json_metadata{}
created2020-03-18 00:10:54
last_update2020-03-18 00:10:54
depth1
children0
net_rshares1,311,436,800
last_payout2020-03-25 00:10:54
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length682
author_reputation-5,873,390,668,414
root_title"Symlink-Angriffe: Wenn A -> B folgt B == A?"
beneficiaries[]
max_accepted_payout10,000.000 SBD
percent_steem_dollars100
author_curate_reward""
vote details (1)