Ho un progetto di sito web Django che è in diretta (chiamiamolo esempio.com). È un forum in cui gli utenti possono inviare commenti e rispondere a loro. Ha un database Postgresql e un proxy inverso gunicorn + nginx come server web configurato. Sono ospitato su una macchina virtuale azionata da Azure, con Ubuntu 14.04 lt Debian come sistema operativo. Infine, si noti che l'applicazione Web e il server siedono su due istanze separate della macchina virtuale.
Sospetto che i miei server potrebbero essere compromessi - Sono nella fase di raccolta dei dati in cui sto accertando se (i) i miei server sono effettivamente compromessi (ii) se anche i miei dati sono compromessi (iii) come ha fatto il compromesso capita, in modo da non essere più hackerato.
Nelle applicazioni Django, c'è un file base.html
che tutti gli altri file .html
ereditano (o extend
in Django). Questo file base.html
contiene il tag <head>
con i meta tag richiesti eccetra, quindi non è necessario replicarlo in ogni file di modello.
Il mio file base.html
contiene un codice javascript che non ho scritto . In effetti, non uso affatto javascript nel mio codice. Questo snippet javascript dannoso reindirizza i miei utenti agli annunci pubblicitari (è un trucco per fare soldi). Se accedo al server di produzione della mia applicazione Web e nano
al file base.html
(ad esempio, aprilo in un editor di testo), i frammenti offensivi di javascript non appaiono lì .
In secondo luogo, quando controllo l'elemento sul mio sito web attivo (browser: Firefox), vedo un pulsante ev
accanto al tag compresso del mio sito web:
QuestoèapparentementeunpulsanteeventipereseguireildebugdiJSnell'ispettoredelcodicediMozilla.Selopreme,vedo:
Nonsonosicurodicosasia:37
(porta37?).Inoltre,sepremoilpulsantedipausa(debug)davantiaclick
,vengoportatoaunodeiframmentidiJScherisiedononelmiocodicebase.html
:
La mia confusione riguarda come possono questi frammenti JS essere parte del mio sito web live quando i file nel mio server di produzione sembrano senza loro?
Immagino che trovare la fonte dell'hack richiederebbe approfondire la questione. Non ho ancora installato SSL, ma sospetto che il mio problema non possa essere aiutato da questo. Questo è un progetto a due persone - e l'altra persona è un'antropologia culturale, un'antropologia culturale specializzata negli studi dell'Asia meridionale, quindi sono sicuro che non ha nulla a che fare con questo.
Ho impostato rules.v4
per iptables
su:
*filter
# Allow all outgoing, but drop incoming and forwarding packets by default
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
# Custom per-protocol chains
:UDP - [0:0]
:TCP - [0:0]
:ICMP - [0:0]
# Acceptable UDP traffic
# Acceptable TCP traffic
-A TCP -p tcp --dport 22 -j ACCEPT
-A TCP -p tcp --dport 80 -j ACCEPT
# Acceptable ICMP traffic
# Boilerplate acceptance policy
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i lo -j ACCEPT
# Drop invalid packets
-A INPUT -m conntrack --ctstate INVALID -j DROP
# Pass traffic to protocol-specific chains
## Only allow new connections (established and related should already be handled)
## For TCP, additionally only allow new SYN packets since that is the only valid
## method for establishing a new TCP connection
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP
# Reject anything that's fallen through to this point
## Try to be protocol-specific w/ rejection message
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
# Commit the changes
COMMIT
*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
1COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
*security
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT