¡Nos han hackeado!
Hemos descubierto que alguien ha estado manipulando nuestras políticas, pero parece que no podemos averiguar quién. Nos han pedido que investiguemos quién ha cambiado nuestras políticas de acceso a las filas (pero necesitamos un poco de suspensión de la incredulidad).
Las políticas no se han tocado en mucho tiempo, pero tenemos razones para creer que hace más de 2 semanas, alguien cambió nuestras políticas.
El problema es que no podemos utilizar la pestaña Historial de consultas, que sólo nos ofrece 14 días de historial.
Estamos en un aprieto y necesitamos averiguar quién cambió nuestra política.
Para configurar rápidamente esta prueba, ejecute lo siguiente.
*Nos hemos abstenido de utilizar un usuario real debido al nivel de acceso que ese usuario necesitaría. En este caso, te estás cazando a ti mismo 🙂 .
Datos simulados:
create table MOCK_DATA (
id INT,
salary INT,
teamnumber INT
);
insert into MOCK_DATA (id, salary, teamnumber) values (1, 781767, 2);
insert into MOCK_DATA (id, salary, teamnumber) values (2, 701047, 5);
insert into MOCK_DATA (id, salary, teamnumber) values (3, 348497, 2);
insert into MOCK_DATA (id, salary, teamnumber) values (4, 555275, 2);
insert into MOCK_DATA (id, salary, teamnumber) values (5, 144962, 3);
insert into MOCK_DATA (id, salary, teamnumber) values (6, 832979, 4);
insert into MOCK_DATA (id, salary, teamnumber) values (7, 387404, 1);
insert into MOCK_DATA (id, salary, teamnumber) values (8, 427563, 3);
insert into MOCK_DATA (id, salary, teamnumber) values (9, 788928, 3);
insert into MOCK_DATA (id, salary, teamnumber) values (10, 257613, 1);
insert into MOCK_DATA (id, salary, teamnumber) values (11, 483792, 4);
insert into MOCK_DATA (id, salary, teamnumber) values (12, 720679, 3);
insert into MOCK_DATA (id, salary, teamnumber) values (13, 452976, 4);
insert into MOCK_DATA (id, salary, teamnumber) values (14, 541193, 2);
insert into MOCK_DATA (id, salary, teamnumber) values (15, 159377, 1);
insert into MOCK_DATA (id, salary, teamnumber) values (16, 825003, 4);
insert into MOCK_DATA (id, salary, teamnumber) values (17, 362209, 3);
insert into MOCK_DATA (id, salary, teamnumber) values (18, 291622, 5);
insert into MOCK_DATA (id, salary, teamnumber) values (19, 646774, 3);
insert into MOCK_DATA (id, salary, teamnumber) values (20, 971930, 1);
CREATE OR REPLACE ROW ACCESS POLICY demo_policy
AS (teamnumber int) RETURNS BOOLEAN ->
CURRENT_ROLE() = 'HR'
OR LEFT(CURRENT_ROLE(),13) = 'MANAGER_TEAM_' AND RIGHT(CURRENT_ROLE(),1) = RIGHT(teamnumber, 1);
alter table MOCK_DATA add row access policy demo_policy on (teamnumber);
“The hack”
CREATE OR REPLACE PROCEDURE totally_not_a_suspicious_procedure()
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS
$$
var stmt = snowflake.createStatement({
sqlText: "alter table MOCK_DATA drop row access policy demo_policy;"
});
stmt.execute();
return "Row access policy dropped successfully.";
$$;
CALL totally_not_a_suspicious_procedure()
select * from MOCK_DATA;
CREATE OR REPLACE PROCEDURE totally_not_a_suspicious_procedure2()
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS
$$
var stmt = snowflake.createStatement({
sqlText: "alter table MOCK_DATA add row access policy demo_policy on (teamnumber);;"
});
stmt.execute();
return "Row access policy dropped successfully.";
$$;
CALL totally_not_a_suspicious_procedure2();
drop totally_not_a_suspicious_procedure();
drop totally_not_a_suspicious_procedure2();
*El hacker piensa que está siendo inteligente llamando a un procedimiento en lugar del comando real porque asume que sólo mostrará el CALL.
Te toca a ti escribir los comandos para averiguar quién ha accedido a las tablas o a las políticas. Recuerda que no puedes utilizar la pestaña Historial de consultas porque esto debería haber ocurrido «hace más de 14 días».
Recuerda que si deseas participar:
- Regístrate como miembro de Frosty Friday. Puedes hacerlo haciendo clic en la barra lateral y luego yendo a «REGISTRARSE» (ten en cuenta que unirte a nuestra lista de correo no te proporcionará una cuenta de Frosty Friday).
- Publica tu código en GitHub y asegúrate de que sea de acceso público (consulta nuestra guía si no sabes cómo hacerlo).
- Publica la URL en los comentarios del desafío.
Si tienes alguna pregunta técnica que te gustaría plantear a la comunidad, puedes hacerlo aquí, en nuestro hilo dedicado a estos retos.
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.