ubuntuusers.de

einzelnes programm (oder paket) den internetzugriff verwehren

Status: Ungelöst | Ubuntu-Version: Ubuntu 8.10 (Intrepid Ibex)
Antworten |

plooy

Anmeldungsdatum:
28. März 2009

Beiträge: Zähle...

hi leute

ich habe eine frage, die wie ich sehe doch schon mehrfach angesprochen worden ist, nur leider habe ich keine auf mein problem passende antwort gefunden. es geht (vorerst) um das sperren des internetzugriffes einzelner programme.

folgende datei habe ich angelegt und ausführbar gemacht: name: testinet.sh inhalt: ping www.google.de

dann habe ich eine neue gruppe erstellt ("noinet") mit der gid 1011. dies habe ich der datei zugewiesen: sudo chgrp noinet testinet.sh sudo chmod g+s testinet.sh

und eine regel in den iptables verfasst: sudo iptables -A OUTPUT -t filter -o eth+ -m owner --gid-owner 1011 -j DROP

nach dem starten des skriptes konnte es noch immer auf www.google.de zugreifen, habe ich etwas übersehn, oder wieso werden die pakete weitergeleitet?

–-

der zweite ansatz lief über das anfd-skript (hier aus dem forum/wiki):

die ober erzeugte datei dient hier wieder als test. in der anfd.conf wurde folgender eintrag gemacht: testinet.sh *

nach dem starten von anfd (sudo anfd -D) schreibt dieses: Load config file: testinet.sh can not pass by default Done

allerdings kann testinet.sh auf google zugreifen (also genauso wie im ersten versuch).

Packet arrived: parse: IP-Version: 4 Protocol: UDP Dest-IP: 192.168.2.1 Dest-Port: 53 Path: /bin/ping cmdLine: pingwww.google.de checking rules...: can pass Done

–-

dabei ist mir jedoch aufgefallen dass das paket ja an den router gesendet wird, also habe ich den zugriff auf diesen explizit untersagt (eintrag in der anfd.conf: "testinet.sh 192.168.2.1") leider ohne erfolg.

–-

dann habe ich eine zeile zu der anfd.conf hinzugefügt ("ping *"), die zwar das gebracht hat dass ich wollte, jedoch zu einem hohen preis: ich konnte auch per hand kein ping mehr starten.

meine frage ist, was habe ich falsch gemacht oder übersehen? wieso geht das nicht? und wenn es bei diesem beispiel schon nicht geht, wie soll es dann erst in "echten" programmen oder skripten gehen?

und zum zweiten teil des problems: letztendlich soll das alles darauf rauslaufen, ein komplettes paket den internetzugriff zu verweigern. damit meine ich, dass ein programm das installiert wird und mehrere ausführbare dateien erzeugt, das all diese dateien dieser sperre unterliegen. wie kann man das verwirklichen, herauszufinden welche solchen dateien wo alles erzeugt wurden und sie dann zu sperren, kann man etwas auf das paket anwenden, zum beispiel die gruppe des pakets ändern, und alle erzeugten dateien tragen die selbe gruppe, und wie kann ich dann (wie im ersten versuch) das internet sperren?

vielen vielen dank für eure geduld .... ich weiß es ist viel, aber mir wichtig, deswegen DANKE

Red_Radish

Anmeldungsdatum:
7. September 2007

Beiträge: 770

plooy schrieb:

hi leute

ich habe eine frage, die wie ich sehe doch schon mehrfach angesprochen worden ist, nur leider habe ich keine auf mein problem passende antwort gefunden. es geht (vorerst) um das sperren des internetzugriffes einzelner programme.

folgende datei habe ich angelegt und ausführbar gemacht: name: testinet.sh inhalt: ping www.google.de

dann habe ich eine neue gruppe erstellt ("noinet") mit der gid 1011. dies habe ich der datei zugewiesen: sudo chgrp noinet testinet.sh sudo chmod g+s testinet.sh

Hast du dir mal angeschaut unter welchen Rechten der zugehörige Prozess auch real läuft? Nur weil du die Rechte eines Skripts ändert, heißt das noch lange nicht, dass das Skript auch mit der entsprechenden GID läuft.

Füge einfach mal folgende Zeile zu testinet.sh hinzu:

echo $$
cat "/proc/"$$"/status"

Und dann auf die Zeilen uid/gid achten.

und eine regel in den iptables verfasst: sudo iptables -A OUTPUT -t filter -o eth+ -m owner --gid-owner 1011 -j DROP

vielleicht auch eher so etwas:

iptables -A OUTPUT --match owner --gid-owner 1011 -d ! 127.0.0.1 -s ! 127.0.0.1 -j DROP

Manche Programme brauchen Zugriff auf localhost, um zu funktionieren.

nach dem starten des skriptes konnte es noch immer auf www.google.de zugreifen, habe ich etwas übersehn, oder wieso werden die pakete weitergeleitet?

match owner funktioniert nicht mit allen Protokollen. UDP und TCP ist kein Problem. ICMP wird aber nicht gefiltert. Sprich: pingen kannst du nicht verhindern. Verhindert wird allerdings, dass google.de aufgelöst werden. Denn DNS geht über UDP (oder TCP). ping google.de müsste also scheitern. Verwendest du aber die IP-Adresse von google.de direkt, klappt es nicht.

plooy

(Themenstarter)

Anmeldungsdatum:
28. März 2009

Beiträge: 22

ok ich habe dies ausprobiert und festgestellt, dass das skript nicht als element der gruppe ausgeführt wird. das problem ist, dass skripte die ein suid oder sgid bit tragen nie als solche ausgeführt werden (sicherheitsfunktion).

soweit so schlecht .... wie kann ich das anders lösen, also einer kompletten programmgruppe (siehe ersten post) verbieten auf das internet zuzugreifen?

otzenpunk Team-Icon

Avatar von otzenpunk

Anmeldungsdatum:
17. Oktober 2005

Beiträge: 8691

Wohnort: Hamburg-Altona

Was verstehst du unter einer "Programmgruppe"?

Dass dein iptables-Versuch nicht funktioniert, ist klar, denn wie Red Radish schon geschrieben hat, bezieht sich gid-owner-match auf die Gruppen-ID, unter der ein Programm gestartet wurde, und nicht welcher es gehört.

Anfd funktioniert ja anscheinend. Bloß untersucht es eben nur den Befehl, der wirklich die Netzwerkverbindung erzeugt, und nicht irgendwelche übergeordneten. Wäre testinet bspw. ein Perl- oder Pythonskript, dass direkt irgendwelche Sockets öffnet, würde es funktionieren. Die Frage ist also: Was für Programme möchtest du konkret blockieren?

plooy

(Themenstarter)

Anmeldungsdatum:
28. März 2009

Beiträge: 22

mit programmgruppe meine ich: ausgangspunkt ist eine einzelne datei (installationsskript oä), diese installiere ich und sie erzeugt mehrere ausführbare dateien, man pages etc

es kommt mir darauf an zu wissen welche ausführbaren dateien dadurch erstellt werden und jeder solchen den zugriff auf das internet zu verwehren

kann ich den umkehrschluss ziehen und pauschal nur bestimmten programmen den zugriff auf das internet erlauben, und jeder versuch eines unautorisierten programmes wird protokolliert?

das programm, weswegen ich die frage stelle, wird eine binary sein, also kein skript, und müsste daher die sgid methode akzeptieren, ich kann mich nicht darauf verlassen dass es nicht nach hause telefoniert, also so gesehn darf kein solches paket durch kommen .... die sicherste methode wäre letztendlich doch eine zweite bootbare partition zu haben oder?

otzenpunk Team-Icon

Avatar von otzenpunk

Anmeldungsdatum:
17. Oktober 2005

Beiträge: 8691

Wohnort: Hamburg-Altona

plooy schrieb:

es kommt mir darauf an zu wissen welche ausführbaren dateien dadurch erstellt werden und jeder solchen den zugriff auf das internet zu verwehren

Wenn du das Installationsprogramm nicht untersuchen kannst, kannst du das z.B. mit find herausfinden:

touch /tmp/timestamp
./installationsskript
sudo find / -newer /tmp/timestamp | egrep -v '^\/(proc|dev|sys)'

Das listet dir alle Dateien auf, die nach dem touch-Befehl angelegt bzw. verändert wurden. (Welche davon wirklich vom Installationsskript, und welche durch irgendwelche Hintergrundprozesse verändert wurden, musst du allerdings selber herausfinden.)

Antworten |