Python code for MAC address change

07 dicembre, 2018

Ogni interfaccia di rete ha un identificativo univoco denominato MAC address (Media Access Control) assegnato dal produttore. Quest'ultimo è assegnato a livello hardware ma è spesso possibile modificarlo a livello software.

Nel livello più basso del modello di rete l'indirizzo MAC è sostanzialmente utilizzato per far comunicare due interfacce di rete collegate a una rete. Oltre al suo uso classico nell'ambito networking, un indirizzo MAC viene utilizzato anche per altri scopi:

  • I server DHCP lo usano per impostare reservation di determinati indirizzi ip
  • Alcune reti consentono l'accesso solo a MAC address specificati (MAC address filtering, MAC authentication)
  • Per il suo essere univoco, può essere utilizzato per il device tracking

Il cambio del MAC address o MAC spoofing di un'interfaccia di rete non è necessariamente un'operazione malevola, ma in alcuni casi si. Cambiando MAC address è infatti possibile, per esempio, presentarsi con un MAC valido alle ACL di un router, oppure saltare in una specifica VLAN per effettuare successivamente uno sniffing.

Di seguito uno script python per la modifica del MAC address di un'interfaccia di rete in ambiente Linux.

#!/usr/bin/env python

import subprocess
import optparse


def get_arguments():
    parser = optparse.OptionParser()
    parser.add_option("-i", "--interface", dest="interface", help="Interfaccia da selezionare per il cambio MAC address")
    parser.add_option("-m", "--mac", dest="new_mac", help="Nuovo MAC address nel formato 00:00:00:00:00:00")

    (options, arguments) = parser.parse_args()
    if not options.interface:
        parser.error("[-] Specifica una interfaccia, usa --help per maggiori informazioni")
    elif not options.new_mac:
        parser.error("[-] Specifica un mac address, usa --help per maggiori informazioni")
    return options


def change_mac(interface, new_mac):
    print("[+] Cambio MAC address per l'interfaccia " + interface)

    subprocess.call(["ifconfig", interface, "down"])
    subprocess.call(["ifconfig", interface, "hw", "ether", new_mac])
    subprocess.call(["ifconfig", interface, "up"])


options = get_arguments()
change_mac(options.interface, options.new_mac)

E' possibile utilizzare il codice salvandolo in un file .py e richiamandolo come segue:

python mac_changer.py [opzioni]

Le opzioni da parsare allo script sono -i nomeinterfaccia e -m indirizzomac.

es.: python mac_changer.py -i eth0 -m 00:11:22:33:44:55

 

Ip reale su log Apache con reverse proxy Nginx

26 novembre, 2018

In una infrastruttura web che espone siti e servizi usando un reverse proxy Nginx davanti ai web server Apache, generalmente, accade che le chiamate fatte al server web hanno come sorgente il reverse proxy. Questo comporta che i file di log del server web registreranno come ip client sempre e solo l'ip del reverse proxy. Tutto questo anche se, Nginx, ha tra i suoi header HTTP X-Forwarded-For.

HTTP X-Forwarded-For contiene l'ip reale del client, ma, Apache di default non preleva i dati da questo header. Per abilitare questa funzione è necessario installare sul web server Apache il modulo mod_rpaf:

apt-get install libapache2-mod-rpaf

Dopo l'installazione del modulo, quest'ultimo va configurato inserendo il seguente codice all'interno del file /etc/apache2/mods-available/rpaf.conf

<IfModule mod_rpaf.c>
	RPAFenable On
	RPAFsethostname On
	RPAFproxy_ips xxx.xxx.xxx.xxx (indirizzo ip del reverse proxy)
</IfModule>

Salvato il file è necessario riavviare il web server Apache.

E' possibile anche forzare il passaggio degli header inserendo i seguenti parametri nel virtual host del reverse proxy Nginx:

proxy_set_header   Host             $host;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

Benvenuti

19 novembre, 2018
#include <iostream>
class Saluti
{
public:
    void ciao()
    {
        std::cout << "Hello World!" << std::endl;
    }
};
int main()
{
    Saluti s;
    s.ciao();
    return 0;
}
Home