Hits : 4177

Jail for Bind


Chroot Bind


Για περισσότερα ρίξτε μια ματιά στο chroothttpd?


file:dnschroot.gif


Το πρόγραμμα bind (ακρονύμιο του Berkeley Internet Name Domain) είναι ένα από πιο δημοφιλή
και πολύ-χρησιμοποιημένα προγράμματα γύρω από το DNS στο διαδίκτυο. Αποτελεί πλέον προϊόν
του οργανισμού ISC. Για την έκδοση 9 (bind v9) έχουν ξαναγραφτεί αρκετά τμήματα κώδικα τα
οποία είχαν προβλήματα σχετικά με την αρχιτεκτονική του bind σε προηγούμενες εκδόσεις. Ένα
χαρακτηριστικό το οποίο έχει προστεθεί είναι η δυνατότητα να τρέχει σε BIND περιβάλλον. Έχει
υλοποιηθεί τμήμα κώδικα που και ΔΕΝ χρειάζεται να ακολουθήσουμε την διαδικασία που κάναμε
στο chroothttpd.
Ένας πολύ ενδιαφέρον πίνακας : https://www.isc.org/security-report/


top


Εγκατάσταση της υπηρεσίας


Σκοπός είναι να δημιουργήσουμε ένα jail περιβάλλον για να μπορεί να τρέξει το bind εντός chroot
χωρίς όμως να τροποποιήσουμε κατά πολύ το σύστημά μας ή να κάνουμε πολλές αλλαγές. Ακόμα να μας
δίνεται η δυνατότητα να μπορούμε να αναβαθμίσουμε την υπηρεσία μας χωρίς όμως να πραγματοποιούμε
αλλάγες στο σύστημά μας.


Επειδή μου αρέσει πολύ να χρησιμοποιώ scripts για κάθε δουλειά, το ίδιο κάνω και εδώ:


Formatter "highlight/html" not found


top


Δημιουργία Χρήστη


Πριν συνεχίσουμε χρειάζεται να δημιουργήσουμε την ομάδα και τον χρήστη, στον οποία θα 
μεταβιβάζουμε τα δικαιώματα του bind κατά την εκκίνησή του μέσα στο BIND περιβάλλον.
Με αυτό τον τρόπο εάν κάποιος αποκτήσει δικαιώματα στο bind μέσω κάποιου κενού ασφαλείας
να ΜΗΝ πάρει τα δικαιώματα του διαχειριστή αλλά του παρακάτω χρήστη:


groupadd -f named
useradd -c 'Bind User' -d /dev/null -g named -s /bin/false named


top


Δημιουργία Καταλόγων


Αυτή την στιγμή είμαστε σε θέση να δημιουργήσουμε όλα τα απαραίτητα αρχεία και καταλόγους
για να το jail περιβάλλον μας. Οπότε και δημιουργούμε τα εξής:


mkdir -pv $BIND/etc
mkdir -pv $BIND/dev
mkdir -pv $BIND/var/run
mkdir -pv $BIND/var/log
mkdir -pv $BIND/var/namedb


top


Δημιουργία συσκευών


Αυτή την στιγμή έχουμε δημιουργήσει τους καταλόγους, οπότε και προχωρούμε τις 
απαραίτητες συσκευές:


mknod $BIND/dev/null c 1 3
mknod $BIND/dev/zero c 1 5
mknod $BIND/dev/random c 1 8
chmod 666 $BIND/dev/*


Σε αυτό το σημείο χρειάζεται να κάνουμε μία αλλαγή στο αρχείο ρυθμίσεων
του προγράμματος syslog daemon /etc/default/syslogd ώστε να μπορεί
το πρόγραμμα bind να καταγράφει μέσω της συσκευής /dev/log :


perl -p -i -e 's/^SYSLOGD=""$/SYSLOGD="\-a \/opt\/bind_950_P1\/dev\/log"/g' /etc/default/syslogd
/etc/init.d/sysklogd restart


top


Αντιγραφή αρχείων


Τώρα μπορούμε να αντιγράψουμε όλα τα απαραίτητα αρχεία που χρειαζόμαστε ενός jail περιβάλλον.
Τα παρακάτω αρχεία είναι τα αρχεία ρυθμίσεων του chroot περιβάλλον για το bind:


grep named /etc/group > $BIND/etc/group
grep named /etc/passwd > $BIND/etc/passwd
grep 127.0.0.1 /etc/hosts > $BIND/etc/hosts

cp /etc/resolv.conf $BIND/etc/resolv.conf
cp /etc/localtime $BIND/etc/localtime
cp /etc/nsswitch.conf $BIND/etc/nsswitch.conf


Μετά από όλα αυτά χρειάζεται να αντιγράψουμε το αρχείο db.cache για να ορίσουμε
την ρίζα των dns:


cd $BIND/var/namedb/
wget -c ftp://ftp.internic.net/domain/db.cache


top


Δημιουργία αρχείου named.conf


Εν συνεχεία χρειάζεται να δημιουργήσουμε το named.conf.
Για να μπορούμε να κάνουμε χρήση του bind μέσω του rndc:


$BIND/sbin/rndc-confgen -b 512 > $BIND/etc/rndc.conf
tail $BIND/etc/rndc.conf | head -9 | sed -e 's/# //g' > $BIND/etc/named.conf


top


Αλλαγή δικαιωμάτων


Τώρα είμαστε σε θέση να τροποποιήσουμε τα δικαιώματα των αρχείων
ρυθμίσεων του bind, δίνοντας την δικαιοδοσία στον χρήστη named:


chown named.named $BIND/etc/rndc.conf $BIND/etc/named.conf
chown -R named.named $BIND/var/


top



# $BIND/sbin/named -g -u named -t $BIND
# $BIND/sbin/named -g -u named


Named.conf


named.conf


Για να ολοκληρώσουμε την διαδικασία και να μπορεί το bind να τρέχει εντός
του jail περιβάλλον χρειάζεται να προσθέσουμε στο τέλος του αρχείου named.conf
τα παρακάτω:


# options
options {
	pid-file "/var/run/named.pid";
};

# db.cache - root name server
zone "." IN {
        type hint;
	file "/var/namedb/db.cache";
};

# logging

logging {
  channel my_log {
    file "/var/log/named.log";
    severity dynamic;
    print-time yes;
    print-severity yes;
    print-category yes;
  };

  category default {
	my_log;
  };
};


# forward
zone "otenet.gr" {
        type forward;
        forwarders { 195.170.0.1; };
        forward only;
};


top


Εκκίνηση named


Και σε αυτό το σημείο απλά χρειάζεται να εκκινήσουμε το bind:


Πριν εκκινήσουμε το bind κανονικά θα το ξεκινήσουμε το option -g
ώστε να δούμε μήπως μας χτυπήσει πουθενά:


$BIND/sbin/named -g -t $BIND -c /etc/named.conf -u named


εάν όλα πάνε καλά τότε απλά:


$BIND/sbin/named -t $BIND -c /etc/named.conf -u named


Και ελέγχουμε με την εντολή:

ps -ef | grep -i na[m]ed


top