W ramach programu Cybertarcza Antykryzysowa, ugrupowanie Plaintekst i Sekrety udostępniło obywatelom serwis szyfrujący. Pomimo głośnej krytyki jest on obecnie dostępny pod:
nc ecsc21.hack.cert.pl 25738
Eksperci wykazali, że szyfrowanie używa algorytmu AES CBC ze stałym wektorem inicjalizującym oraz kluczem. Organizacja utrzymuje, że pomimo tego, bezpieczeństwo zapewnia poufność tych parametrów. Z racji braku środków unijnych do dokończenia wszystkich kamieni milowych, zrezygnowano również z implementacji paddingu.
Komunikacja z serwisem odbywa się prostym protokołem TLV:
----------------------------------------------------- | TYPE | LENGTH | VALUE | ----------------------------------------------------- | 1B | 1B | LENGTH BYTES | -----------------------------------------------------
Uważni obserwatorzy ponadto zaobserwowali fragment kodu na portalu wklejmnie.pl:
#define TYPE_ENC_REQ 0x01 #define TYPE_DEC_REQ 0x02 #define TYPE_ENC_RSP 0x11 #define TYPE_DEC_RSP 0x22 #define TYPE_ERR 0xee typedef struct type_len_value { uint8_t type; uint8_t length; uint8_t value[300]; } tlv_t; struct enc_space { uint8_t ciphertext[64]; uint8_t plaintext[64]; }; int handle(tlv_t *msg){ struct enc_space es; memset(&es, 0, sizeof(es)); if (msg->type == TYPE_ENC_REQ) { size_t copy_size = msg->length > 64 ? 64 : msg->length; memcpy(es.plaintext, msg->value, copy_size); aes_encrypt(es.plaintext, es.ciphertext, msg->length); msg->type = TYPE_ENC_RSP; msg->length = copy_size; memcpy(msg->value, es.ciphertext, copy_size); } else if (msg->type == TYPE_DEC_REQ) { size_t copy_size = msg->length > 64 ? 64 : msg->length; memcpy(es.ciphertext, msg->value, copy_size); aes_decrypt(es.ciphertext, es.plaintext, msg->length); msg->type = TYPE_DEC_RSP; msg->length = copy_size; memcpy(msg->value, es.plaintext, copy_size); } return 0; }
Dodatkowo, grupa pewnych dzieciaków z 3ciego piętra twierdzi, że udało jej się przełamać zabezpieczenia tarczy i wykraść ważne sekrety z serwera aplikacji. Opublikowali wiadomość, mówiącą że jeśli nadpisze się 8 bajtów za przestrzenią kryptograficzną wartością: 0x00005555555553f6 serwer zróci wcześniej wspomniany sekret (nie ma potrzeby łamać ASLR, to tylko statyczna wartość).
-------------- | | | CIPHERTEXT | | 64B | | | -------------- | | | PLAINTEXT | | 64B | | | -------------- | 8B | PTR | --------------
Czy uda Ci się potwierdzić ich teorię?!
Format flagi:
ecsc21{litery_cyfry_i_znaki_specjalne}
.
W razie wątpliwości lub pytań dotyczących konkursu zapraszamy na naszego Discorda: https://discord.gg/gAtRKa2rcn.