No t’estàn hackejant, és que ho has programat malament.
setembre 30, 2007
Fa unes setmanes, de cop i volta, l'agenda va deixar de funcionar. Hi vaig entrar i no donava cap resultat. És més, tot el sistema semblava totalment ralentitzat. Així que em vaig connectar per SSH a GràciaNet i vaig poder veure que el mysql estava totalment desbocat, amb una sentència SQL que monopolitzava tots els recursos. Es tractava d'un INSERT a l'agenda que, espantat, vaig abortar. Al repassar els "danys" vaig veure que hi havia prop d'1.5milions de registres (o actes) a l'agenda pendents d'aprovació! Vaig canviar la contrasenya d'accés, vaig banejar la IP que havia provocat aquest desgavell i me'n vaig oblidar. Òbviament, vaig haver d'esborrar tots els registres erronis i reparar la base de dades, que havia quedat totalment malmesa.
L'endemà, però, tornava a estar igual. Una IP diferent havia aconseguit trobar una escletxa de nou i havia colat més d'1 milió de registres. Arreglat el (nou) desgavell em vaig posar a investigar què caram estava passant. Una vegada pot ser casualitat, dues és error.
Així que, com a bon humà que sóc, vaig partir de la base que la culpa era dels altres. És a dir, l'agenda estava ben programada, els controls estaven ben implementats i, per tant, algú havia trobat un forat al servidor per on colar-se i executar codi arbitràriament al mysql.
Em vaig submergir als logs buscant el rastre. Tenia només una IP, donat que l'agenda registra tot el que passa (a banda dels logs del servidor de web). Curiosament, la IP atacant només accedia una sola vegada, i vaig pensar que d'alguna forma aconseguia obtenir la clau de la base de dades. "Quin crack, amb un sol cop d'ull a la pàgina web en té prou per obtenir la clau", vaig pensar. Per molt que rebuscava als logs no trobava cap escletxa: ningú havia accedit al servidor via SSH, a través de la web de l'agenda tan sols apareixia un registre d'accés (quan per introduir un acte cal com a mínim passar per dues pàgines), el servidor de mysql estava configurat correctament per tal que ningú accedís desde fora de GràciaNet… En definitiva, tot semblava ben configurat i per enlloc hi estava trobant una forat.
Així que vaig recórrer al millor bibliotecari del món, el Sr. Google. Buscava bugs de mysql, forats de seguretat de PHP per on poguessin obtenir la clau… res.
Una pàgina em va fer obrir els ulls. Explicava que la majoria de vegades el codi injectat al mysql es produïa per una mala planificació dels controls. Així que vaig canviar l'orientació de la meva cerca, i considerant que el servidor era segur vaig anar a la base: potser l'agenda no era segura.
Així que vaig repassar la pàgina d'introducció d'actes i, sobretot, la de verificació de les dades introduïdes. I ho vaig trobar. I vaig entendre què estava fent el pressumpte hacker. Que, òbviament, no era tal sinó un vulgar spammer.
Resulta que la pàgina d'introducció d'actes incorpora una sèrie de controls per tal de verificar les dades abans de passar a la següent pàgina, on es tornen a verificar i si està tot bé s'introdueix a la base de dades i s'envia un correu cap als administradors de la web indicant la presència d'un acte nou. Aquest correu no arribava mai en el cas que ens ocupa, d'aquí que jo pensés que l'error no era degut a l'agenda. Doncs bé, en aquesta segona pàgina no estava ben implementat el control d'actes recurrents i els spammers s'havien descarregat la primera pàgina, l'havien modificat localment per eliminar-ne els controls i havien enviat un acte recurrent sense data de finalització. Això provocava que el sistema anés afegint actes de forma contínua, doncs al indicar que era un acte diari però no dir el dia que s'acabava entrava en un bucle infinit.
Vaig corregir l'error, en vaig afegir algún de nou per tal que no tornés a passar i s'han acabat els maldecaps.
Tot plegat em demostra que la supèrbia és mala consellera. Jo pensant que els hackers havien aconseguit entrar a GràciaNet i resultava que l'error era meu. Com al 99% dels "atacs" que es produeixen a la Xarxa.
Una cura d'humiltat, que m'ha anat molt bé. I m'ha fet recordar i tenir present que la majoria d'atacs no són tals, sinó efectes resultants de la prepotència de nosaltres els programadors/administradors que pràcticament sempre donem la culpa a la part del software que no coneixem/administrem per a justificar els errors en el nostre programari. Quan, de fet, la majoria d'errors són conseqüència d'una mala programació.
Mea culpa.
La humilitat sempre va bé tenir-la a ma. Diuen que ens fa més savis. Al menys ens fa menys soberbis, que ja és molt.
Dels errors aprenem i rectifiquem. Tot i així, t’he de felicitar sempre t’he trobat un bon informàtic, i amb aquest article demostres que encara ho ets més, o sigui deixa de hackejar el servidor de GràciaNET!!! 😀