La mia istanza EC2 è stata compromessa di recente. Non ha molta importanza dato che sto avviando il mio sito web e non c'erano ancora informazioni sensibili sul mio server, ma ho intenzione di farlo in futuro. Ho intenzione di chiudere il server compromesso e installarne un altro per proteggere il mio sito web.
Il mio problema è che voglio assicurarmi che ciò non accada mai più, e l'unico modo in cui posso convincermi che il mio nuovo server è sicuro è sapere come il primo server è stato compromesso e assicurarsi che il nuovo server non possa essere compromesso con lo stesso metodo. Tuttavia, sto riscontrando problemi nell'identificazione / comprensione di come il primo server è stato violato.
Lo stack utilizzato è Rails 4.2.4 + Postgresql 9.3 + Puma + Nginx 1.4.6. Il server che sto utilizzando è Ubuntu 14.04.2 LTS su un'istanza di AWS EC2 t2.micro. Le mie chiavi di accesso AWS non sono state pubblicate da nessuna parte, e io sono l'unico che dovrebbe avere accesso SSH al mio server.
Ora non sono un hacker, o anche un buon amministratore di sistema per questo (anche se sto imparando) quindi devo tenere una mente aperta su come il server è stato infiltrato, ma dal momento che l'unico modo per accedere al mio server è per SSH, presumo che sia così anche per gli hacker. Avevo erroneamente lasciato una regola del gruppo di sicurezza in entrata per la porta SSH 22 per avere una sorgente di 0.0.0.0/0, il che mi fa anche pensare che sia probabilmente questo il modo in cui gli hacker sono entrati.
Accedo al mio server tramite ssh utilizzando una chiave privata con comando simile a
ssh -vi "/home/me/.ssh/my_private_key.pem" ubuntu@my_aws_instance.com
Sono stato informato del compromesso da un'e-mail [email protected] che il mio server stava effettuando attacchi DDOS. Anche se non sono riuscito a verificarlo guardando i miei log, ho trovato alcuni script php nascosti in /var/tmp
che sembravano progettati per inviare e-mail di phishing che mi hanno convinto che il server era stato effettivamente violato.
Non è stata impostata alcuna password per ssh che è stata confermata da hydra
quando ho provato ad attaccare il mio server. Ciò implica che l'utente malintenzionato deve aver indovinato la mia chiave privata RSA ... ma ho capito che questo è non realisticamente possibile .
Non conosco altri possibili modi in cui il server potrebbe essere stato compromesso. Qualcuno ha qualche idea? Qualcuno dei miei presupposti o passaggi è sbagliato?
Regole del gruppo di sicurezza in entrata (al momento della violazione):
HTTP TCP 80 0.0.0.0/0
PostgreSQL TCP 5432 0.0.0.0/0
SSH TCP 22 0.0.0.0/0
Custom TCP Rule TCP 9200 91.216.55.150/32
Grazie in anticipo per il tuo aiuto. Sono sicuro di aver tralasciato molte informazioni utili, quindi se c'è qualcosa di più che vorresti sapere basta chiedere.
EDIT:
Il sito Web contiene alcune funzionalità di input di dati Rails piuttosto standard. Principalmente attraverso i moduli html e lì permetto il caricamento delle immagini usando una gemma chiamata carrierwave .