Esta é uma pergunta canônica sobre segurança do servidor - respondendo a eventos de violação (hacking)
Veja também:
Versão canônica
Suspeito que um ou mais dos meus servidores estejam comprometidos por um hacker, vírus ou outro mecanismo:
- Quais são meus primeiros passos? Ao chegar no local devo desconectar o servidor, preservar "evidências", existem outras considerações iniciais?
- Como faço para recuperar os serviços online?
- Como faço para evitar que a mesma coisa aconteça imediatamente novamente?
- Existem melhores práticas ou metodologias para aprender com esse incidente?
- Se eu quisesse montar um Plano de Resposta a Incidentes, por onde começaria? Isso deve fazer parte do meu planejamento de recuperação de desastres ou de continuidade de negócios?
Versão original
02.01.2011 - Estou a caminho do trabalho às 21h30 de um domingo porque nosso servidor foi comprometido de alguma forma e estava resultando em um ataque DOS ao nosso provedor. Os servidores de acesso à Internet foram desligados, o que significa que mais de 5-600 sites de nossos clientes estão fora do ar. Agora, isso pode ser um hack de FTP ou alguma fraqueza no código em algum lugar. Não tenho certeza até chegar lá.
Como posso rastrear isso rapidamente? Vamos ter um monte de litígios se eu não recuperar o servidor o mais rápido possível. Qualquer ajuda é apreciada. Estamos executando o Open SUSE 11.0.
03.01.2011 - Obrigado a todos pela ajuda. Felizmente eu não era o único responsável por este servidor, apenas o mais próximo. Conseguimos resolver esse problema, embora possa não se aplicar a muitos outros em uma situação diferente. Vou detalhar o que fizemos.
Desconectamos o servidor da rede. Ele estava realizando (tentando realizar) um ataque de negação de serviço em outro servidor na Indonésia, e o culpado também estava baseado lá.
Em primeiro lugar, tentamos identificar de onde no servidor isso estava vindo, considerando que temos mais de 500 sites no servidor, esperávamos estar fazendo bico por algum tempo. No entanto, ainda com acesso SSH, executamos um comando para encontrar todos os arquivos editados ou criados no momento em que os ataques começaram. Felizmente, o arquivo incorreto foi criado durante as férias de inverno, o que significa que muitos outros arquivos não foram criados no servidor naquele momento.
Conseguimos então identificar o arquivo ofensivo que estava dentro da pasta de imagens carregadas em um site ZenCart .
Após uma breve pausa para fumar, concluímos que, devido à localização dos arquivos, ele deve ter sido carregado por meio de um recurso de upload de arquivos que foi protegido de forma inadequada. Depois de pesquisar no Google, descobrimos que havia uma vulnerabilidade de segurança que permitia o upload de arquivos, no painel de administração do ZenCart, para uma foto de uma gravadora. (A seção que ele nunca usou), postar este formulário apenas carregou qualquer arquivo, não verificou a extensão do arquivo e nem verificou se o usuário estava logado.
Isso significava que qualquer arquivo poderia ser carregado, incluindo um arquivo PHP para o ataque. Protegemos a vulnerabilidade com o ZenCart no site infectado e removemos os arquivos ofensivos.
O trabalho foi feito, e eu estava em casa às 2 da manhã
A Moral - Sempre aplique patches de segurança para ZenCart, ou qualquer outro sistema CMS para esse assunto. Assim como quando as atualizações de segurança são lançadas, o mundo inteiro fica sabendo da vulnerabilidade. - Sempre faça backups e faça backup de seus backups. - Empregar ou arranjar alguém que estará lá em tempos como estes. Para evitar que alguém confie em uma postagem em pânico sobre falha do servidor.
É difícil dar conselhos específicos do que você postou aqui, mas eu tenho alguns conselhos genéricos com base em um post que escrevi há muito tempo atrás, quando eu ainda podia me incomodar em blogar.
Não entrar em pânico
Primeiramente, não há "soluções rápidas" além de restaurar seu sistema a partir de um backup feito antes da invasão, e isso tem pelo menos dois problemas.
Esta pergunta continua sendo feita repetidamente pelas vítimas de hackers que invadem seu servidor web. As respostas raramente mudam, mas as pessoas continuam fazendo a pergunta. Não tenho certeza por quê. Talvez as pessoas simplesmente não gostem das respostas que viram ao procurar ajuda ou não consigam encontrar alguém em quem confiem para aconselhá-las. Ou talvez as pessoas leiam uma resposta a essa pergunta e se concentrem demais nos 5% do motivo pelo qual seu caso é especial e diferente das respostas que podem encontrar on-line e percam os 95% da pergunta e resposta em que o caso é próximo o suficiente como o que eles lêem online.
Isso me leva à primeira pepita importante de informação. Eu realmente aprecio que você seja um floco de neve único e especial. Eu aprecio que seu site também seja, pois é um reflexo de você e sua empresa ou, no mínimo, seu trabalho árduo em nome de um empregador. Mas para alguém de fora olhando para dentro, seja um segurança de computador olhando para o problema para tentar ajudá-lo ou até mesmo o próprio invasor, é muito provável que seu problema seja pelo menos 95% idêntico a todos os outros casos que eles alguma vez olhou.
Não leve o ataque para o lado pessoal e não leve para o lado pessoal as recomendações que seguem aqui ou que você recebe de outras pessoas. Se você está lendo isso depois de se tornar vítima de um hack de site, sinto muito e realmente espero que você possa encontrar algo útil aqui, mas não é hora de deixar seu ego atrapalhar o que você precisa Faz.
Você acabou de descobrir que seus servidores foram invadidos. O que agora?
Não entre em pânico. Absolutamente não aja com pressa, e absolutamente não tente fingir que as coisas nunca aconteceram e não aja de forma alguma.
Primeiro: entenda que o desastre já aconteceu. Este não é o momento para negação; é hora de aceitar o que aconteceu, ser realista sobre isso e tomar medidas para gerenciar as consequências do impacto.
Algumas dessas etapas vão doer e (a menos que seu site tenha uma cópia dos meus detalhes) eu realmente não me importo se você ignorar todas ou algumas dessas etapas, isso é com você. Mas segui-los corretamente tornará as coisas melhores no final. O remédio pode ter um gosto horrível, mas às vezes você precisa ignorar isso se realmente quiser que a cura funcione.
Impeça que o problema se torne pior do que já é:
Por mais aborrecidos que seus clientes possam ficar por você contar a eles sobre um problema, eles ficarão muito mais aborrecidos se você não contar a eles, e eles só descobrirão por si mesmos depois que alguém cobrar $ 8.000 em mercadorias usando os detalhes do cartão de crédito que eles roubou do seu site.
Lembra do que eu disse anteriormente? O mal já aconteceu. A única questão agora é quão bem você lida com isso.
Entenda o problema completamente:
Por que não apenas "reparar" o exploit ou rootkit que você detectou e colocar o sistema novamente online?
Em situações como essa, o problema é que você não tem mais controle desse sistema. Não é mais o seu computador.
A única maneira de ter certeza de que você tem o controle do sistema é reconstruir o sistema. Embora haja muito valor em encontrar e corrigir o exploit usado para invadir o sistema, você não pode ter certeza sobre o que mais foi feito no sistema depois que os invasores obtiveram o controle (na verdade, não é inédito para hackers que recrutam sistemas em uma botnet para corrigir as explorações que eles próprios usaram, para proteger "seu" novo computador de outros hackers, bem como instalar seu rootkit).
Faça um plano para recuperação e para colocar seu site online novamente e cumpri-lo:
Ninguém quer ficar offline por mais tempo do que o necessário. Isso é um dado. Se este site for um mecanismo de geração de receita, a pressão para trazê-lo de volta ao ar rapidamente será intensa. Mesmo que a única coisa em jogo seja a reputação da sua empresa, isso ainda vai gerar muita pressão para colocar as coisas de volta rapidamente.
No entanto, não ceda à tentação de voltar a ficar online rápido demais. Em vez disso, mova-se o mais rápido possível para entender o que causou o problema e resolvê-lo antes de voltar a ficar online, ou então você quase certamente será vítima de uma intrusão mais uma vez, e lembre-se, "ser hackeado uma vez pode ser classificado como infortúnio; ser hackeado novamente logo em seguida parece descuido" (com desculpas a Oscar Wilde).
Reduzindo o risco no futuro.
A primeira coisa que você precisa entender é que a segurança é um processo que você tem que aplicar durante todo o ciclo de vida de projeto, implantação e manutenção de um sistema voltado para a Internet, não algo que você pode colocar algumas camadas sobre seu código depois como barato pintar. Para ser adequadamente seguro, um serviço e um aplicativo precisam ser projetados desde o início com isso em mente como um dos principais objetivos do projeto. Sei que isso é chato e você já ouviu tudo isso antes e que eu "simplesmente não percebo a pressão, cara" de colocar seu serviço beta web2.0 (beta) em status beta na web, mas o fato é que isso continua sendo repetido porque era verdade na primeira vez que foi dito e ainda não se tornou uma mentira.
Você não pode eliminar o risco. Você nem deveria tentar fazer isso. No entanto, o que você deve fazer é entender quais riscos de segurança são importantes para você e entender como gerenciar e reduzir o impacto do risco e a probabilidade de que o risco ocorra.
Que medidas você pode tomar para reduzir a probabilidade de um ataque ser bem-sucedido?
Por exemplo:
What steps can you take to reduce the consequences of a successful attack?
If you decide that the "risk" of the lower floor of your home flooding is high, but not high enough to warrant moving, you should at least move the irreplaceable family heirlooms upstairs. Right?
... And finally
I've probably left out no end of stuff that others consider important, but the steps above should at least help you start sorting things out if you are unlucky enough to fall victim to hackers.
Above all: Don't panic. Think before you act. Act firmly once you've made a decision, and leave a comment below if you have something to add to my list of steps.
It sounds like are in slightly over your head; that's ok. Call your boss and start negotiating for an emergency security response budget. $10,000 might be a good place to start. Then you need to get somebody (a PFY, a coworker, a manager) to start calling companies that specialize in security incident response. Many can respond within 24 hours, and sometimes even faster if they have an office in your city.
You also need somebody to triage customers; Doubtless, somebody already is. Somebody needs to be on the phone with them to explain what is going on, what is being done to handle the situation, and to answer their questions.
Then, you need to...
Stay calm. If you are in charge of incident response, what you do now needs to demonstrate the utmost professionalism and leadership. Document everything you do, and keep your manager and executive team apprised of major actions you take; this includes working with a response team, disabling servers, backing up data, and bringing things online again. They don't need gory details, but they should hear from you every 30 minutes or so.
Be realistic. You aren't a security professional, and there are things you don't know. That's ok. When logging in to servers and looking at data, you need to understand your limits. Tread gently. In the course of your investigation, make sure you don't stomp on vital information or change something that might be needed later. If you feel uncomfortable or that you are guessing, that's a good place to stop and get an experienced professional to take over.
Get a clean USB stick and spare hard drives. You will collect evidence here. Make backups of everything you feel may be relevant; communication with your ISP, network dumps, etc. Even if law enforcement doesn't get involved, in case of lawsuit you will want this evidence to prove that your company handled the security incident in a professional and appropriate manner.
Most important is to stop loss. Identify and cut off access to compromised services, data, and machines. Preferably, you should pull their network cable; if you cannot, then pull the power.
Next, you need to remove the attacker and close the hole(s). Presumably, the attacker no longer has interactive access because you pulled the network. You now need to identify, document (with backups, screenshots, and your own personal observational notes; or preferably even by removing the drives from the affected servers and making a full disk image copy), and then remove any code and processes he left behind. This next part will suck if you don't have backups; You can try to untangle the attacker from the system by hand, but you will never be sure that you got everything he left behind. Rootkits are vicious, and not all are detectable. The best response will be to identify the vulnerability he used to get in, make image copies of the affected disks, and then wipe the affected systems and reload from a known good backup. Don't blindly trust your backup; verify it! Repair or close the vulnerability before the new host goes on the network again, and then bring it online.
Organize all of your data into a report. At this point the vulnerability is closed and you have some time to breath. Don't be tempted to skip this step; it is even more important than the rest of the process. In the report, you need to identify what went wrong, how your team responded, and the steps you are taking to prevent this incident from occurring again. Be as detailed as you can; this isn't just for you, but for your management and as a defense in a potential lawsuit.
That's a sky-high review of what to do; most of the work is simply documentation and backup handling. Don't panic, you can do that stuff. I strongly recommend you get professional security help. Even if you can handle what's going on, their help will be invaluable and they usually come with equipment to make the process easier and faster. If your boss balks at the cost, remind him that it's very small when compared to handling a lawsuit.
You have my consolations for your situation. Good luck.
CERT tem um documento Steps for Recovering from a UNIX or NT System Compromise que é bom. Os detalhes técnicos específicos deste documento estão um pouco desatualizados, mas muitos dos conselhos gerais ainda se aplicam diretamente.
Um resumo rápido dos passos básicos é este.
Eu gostaria de apontar especificamente para a seção E.1.
Se você não tiver um sistema já instalado como o tripwire, não há como ter 100% de certeza de que limpou o sistema.
Robert's "bitter pill" answer is spot-on but completely generic (well, as was your question). It does sound like you have a management problem and in dire need of a full-time sysadmin if you have one server and 600 clients but that doesn't help you now.
I run a hosting company which provides a bit of hand-holding in this situation, so I deal with lots of compromised machines, but also deal in best practice for our own. We always tell our compromised clients to rebuild unless they're not absolutely sure of the nature of a compromise. There is no other responsible route in the long term.
However, you are almost certainly just the victim of a script kiddy who wanted a launching pad for DoS attacks, or IRC bouncers, or something completely unrelated to your customers' sites and data. Therefore as a temporary measure while you rebuild, you might consider the bringing up a heavy outbound firewall on your box. If you can block all outbound UDP and TCP connections that aren't absolutely necessary for your sites' functioning, you can easily make your compromised box useless to whoever is borrowing it from you, and mitigate the effect on your provider's network to zero.
This process might take a few hours if you've not done it before, and have never considered a firewall, but might help you restore your clients service at the risk of continuing to give the attacker access to your clients data. Since you say that you have hundreds of clients on one machine, I'm guessing that you're hosting small brochure web sites for small businesses, and not 600 ecommerce systems full of credit card numbers. If that's the case this may be an acceptable risk for you, and get your system back online faster than auditing 600 sites for security bugs before you bring anything back. But you will know what data is there, and how comfortable you would be taking that decision.
This is absolutely not best practice, but if that's not what has been happening at your employer so far, wagging your finger at them and asking for tens of thousands of pounds for a SWAT team for something they might feel is your fault (however unjustified!) doesn't sound like the practical option.
Your ISP's help here is going to be pretty crucial - some ISPs provide a console server and network boot environment (plug, but at least you know what kind of facility to look for) which will let you administer the server while disconnected from the network. If this is at all an option, ask for it and use it.
But in the long term you should plan on a system rebuild based on Robert's post and an audit of each site and its setup. If you can't get a sysadmin added to your team, look for a managed hosting deal where you pay your ISP for sysadminning help and 24-hour response for this kind of thing. Good luck :)
Você precisa reinstalar. Salve o que você realmente precisa. Mas lembre-se de que todos os seus arquivos executáveis podem estar infectados e adulterados. Eu escrevi o seguinte em python: http://frw.se/monty.py que cria MD5-sumbs de todos os seus arquivos em um determinado diretório e na próxima vez que você executá-lo, ele verifica se alguma coisa foi alterada e, em seguida, gera o que arquivos alterados e o que mudou nos arquivos.
Isso pode ser útil para você, para ver se arquivos estranhos são alterados regularmente.
Mas a única coisa que você deve fazer agora é remover seu computador da internet.
NOTE: This is not a recommendation. My specific Incident Response protocol
probably would notdoes not apply unmodified to Grant unwin's case.In our academic facilities we have about 300 researchers who only do computation. You have 600 clients with websites so your protocol will probably be different.
The first steps in our When a Server Gets Compromised Protocol is:
dd
Start doing the post-mortem forensics. Look at logs, figure out the time of the attack, find files that were modified on that time. Try to answer the How? question.
Even if "all backdoors and rootkits are cleaned-up", don't trust that system - re-install from scratch.
Na minha experiência limitada, os comprometimentos do sistema no Linux tendem a ser mais 'abrangentes' do que no Windows. É muito mais provável que os rootkits incluam a substituição de binários do sistema por código personalizado para ocultar o malware, e a barreira para o hot-patch do kernel é um pouco menor. Além disso, é o sistema operacional doméstico para muitos autores de malware. A orientação geral é sempre reconstruir o servidor afetado do zero e é a orientação geral por um motivo.
Formate esse cachorrinho.
Mas, se você não pode reconstruir (ou os poderes constituídos não o deixarão reconstruí-lo contra sua insistência extenuante de que ele precisa), o que você procura?
Como parece que já faz um tempo desde que a invasão foi descoberta e uma restauração do sistema foi feita, é muito provável que os vestígios de como eles entraram tenham sido pisoteados na debandada para restaurar o serviço. Infeliz.
O tráfego de rede incomum é provavelmente o mais fácil de encontrar, pois isso não envolve a execução de nada na caixa e pode ser feito enquanto o servidor está ativo e fazendo qualquer coisa. Presumindo, é claro, que seu equipamento de rede permita a expansão de portas. O que você encontra pode ou não ser diagnóstico, mas pelo menos é informação. Obter tráfego incomum será uma forte evidência de que o sistema ainda está comprometido e precisa ser nivelado. Pode ser bom o suficiente para convencer o TPTB de que uma reformatação realmente vale o tempo de inatividade.
Caso contrário, faça uma cópia dd das partições do seu sistema e monte-as em outra caixa. Comece a comparar o conteúdo com um servidor no mesmo nível de patch que o comprometido. Ele deve ajudá-lo a identificar o que parece diferente (aqueles md5sums novamente) e pode apontar para áreas negligenciadas no servidor comprometido. Esta é uma grande peneiração através de diretórios e binários, e será bastante trabalhoso. Pode até ser mais trabalhoso do que uma reformatação/reconstrução seria, e pode ser outra coisa para acertar o TPTB sobre realmente fazer a reformatação de que realmente precisa.
I'd say @Robert Moir, @Aleksandr Levchuk, @blueben and @Matthew Bloch are all pretty much spot-on in their responses.
However, the answers of different posters differ - some are more on a high-level and talk about what procedures you should have in place (in general).
I'd prefer to separate this out into several separate parts 1) Triage, AKA How to deal with the customers and the legal implications, and identify where to go from there (Listed very well by Robert and @blueben 2) Mitigation of impact 3) Incident response 4) Post-mortem forensics 5) Remediation items and architecture changes
(Insert boilerplate SANS GSC certified response statement here) Based on past experiences, I'd say the following:
Regardless of how you are handling the customer responses, notifications, legal, and future plans, I'd prefer to focus on the main issue at hand. The original question of the OP really only pertains directly to #2 and #3, basically, how to stop the attack, get customers back online ASAP in their original state, which has been well covered in responses.
The rest of the responses are great and cover a lot of identified best-practices and ways to both prevent it from happening in the future as well as better respond to it.
It really depends on the budget of the OP and what sector of industry they are in, what their desired solution is etc.
Maybe they need to hire a dedicated onsite SA. Maybe they need a security person. Or maybe they need a fully managed solution such as Firehost or Rackspace Managed, Softlayer, ServePath etc.
It really depends on what works for their business. Maybe their core competency isn't in server management and it doesn't make sense for them to try to develop that. Or, maybe they are a pretty technical organization already and can make the right hiring decisions and bring on a dedicated team fulltime.
After getting to work and taking a look at the server we managed to figure out the problem. Luckily, the offending files were uploaded to the system on a Sunday, when the office is closed and no files should be created, apart from logs and cache files. With a simple shell command to find out which files have been created on that day we found them.
All the offending files seem to have been within the /images/ folder on some of our older zencart sites. It seems there was a security vulnerability that allowed (using curl) any idiot to upload non-images into the image upload section in the admin section. We deleted the offending .php files, and fixed the upload scripts to dissallow any file uploads that aren't images.
In retrospect, it was quite simple and I raised this question on my iPhone on the way into work. Thank you for all your help guys.
For the reference of anyone that visits this post in the future. I would not recommend pulling the power plug.