作者:Innokenty Sennovsky(rumata888)
如何使学生对枯燥的学科感兴趣?给学习一种游戏形式。很久以前,有人想出了这样的安全游戏-夺旗(CTF)。因此,懒惰的学生对学习如何反向程序,在何处插入引号更好以及为什么专有加密就像在运行中起步而行之类的兴趣更加感兴趣。
学生已经长大,现在有孩子和抵押贷款的经验丰富的专业人员参加了这些“游戏”。他们看到了很多东西,因此为CTF安排任务以使“老人”不发牢骚不是一件容易的事。
而且,如果您过度使用硬核,那么拥有非核心学科领域或第一个认真的CTF的团队将被炸毁。
在本文中,我将告诉您我们的团队如何在“嗯,有些新东西”和“这是某种锡”之间找到平衡,并为今年的CTFZone决赛开发了加密任务。
最终计分板CTFZone 2020
内容
- 可选介绍:2分钟内讲解CTF
- 我们如何理解我们需要一个地穴
- 我们如何选择堆叠
- 我们如何找到任务
4.1的想法。答:图
4.2的汉密尔顿性质是什么?B.如何使用哈密顿循环来识别自己 - 我们如何构建任务
5.1。协议:顶视图
5.2。协议:内部
5.3。最新漏洞 - 我们如何制定任务
- 我们如何测试任务
- 我们如何应对作弊
- 结论
可选介绍:2分钟内讲解CTF
, CTF, — . , CTF- .
: jeopardy attack-defense.
jeopardy . «Jeopardy!», « ». , . , «» . , .
attack-defense (AD) . , — . : attack-defense -10 -20 jeopardy.
AD vulnboxes — , . vulnboxes . — , (checker). , .
, — , . , 5 . . vulnbox , .
, :
- vulnbox;
- , ;
- , .
- CTF, , :
- web,
- pwn,
- misc,
- PPC,
- forensic,
- reverse,
- crypto ( , ).
, , jeopardy. , AD . «» , - , CTFZone.
,
CTFZone, , AD.
, AD, , . , . , .
, . . , nonce ECDSA, , .
, . - AD- , . , : . , , .
, ( ), . , .
, , CTF . — .
, , . , ? :)
, , Python. , .
, DEF CON , Python + C ( , ). C, Python , .
, , , .
, , CTF, — Zero Knowledge Proofs of Knowledge (ZKPoK), . , , - , . ZKPoK : - , . .
.
. . . — , .
, , . , , .
— . , . , .
.
. , , , , , . , 4 : A, B, C, D. A B, C D.
:
, , .
, , : , ABCD → BADC. (): B→A→D→C→B.
. . . , — . :
, . .
, . , , .
— :
, (x, y) (y, x), B D.
.
:
- - , . ;
- , , .
, , (Prover), (Verifier).
0. . , : A→B→C→D→A. , , (. . ) . ( ) .
, . — .
1. . , (commitment). , , : , — , . , , .
:
- . ;
- . , . : .
2. . , (challenge) . , ( ) ( ) .
, , — .
3. . , , , , . , , , .
, , . , , .
. , . , : , , , . , . , - ( , ).
, , , 50- , , . , . . , . 25%, — 12,5% . . , .
.
P.S. Zero Knowledge, - Zero Knowledge Proofs: An illustrated primer. .
. « » = «», « » = «», « » = « ».
:
, , . , , , . :
- ;
- ;
- 16- RANDOMR, ;
- RSA- .
RANDOMR , .
, : , DoS- . PKCS#1 v1.5. , , 3 (Bleichenbacher's e=3 signature attack). , 3 (, SAFE_VERSION macro ):
uint8_t* badPKCSUnpadHash(uint8_t* pDecryptedSignature, uint32_t dsSize){
uint32_t i;
if (dsSize<MIN_PKCS_SIG_SIZE) return NULL;
if ((pDecryptedSignature[0]!=0)||(pDecryptedSignature[1]!=1))return NULL;
i=2;
while ((i<dsSize) && (pDecryptedSignature[i]==0xff)) i=i+1;
if (i==2 || i>=dsSize) return NULL;
if (pDecryptedSignature[i]!=0) return NULL;
i=i+1;
if ((i>=dsSize)||((dsSize-i)<SHA256_SIZE)) return NULL;
#ifdef SAFE_VERSION
//Check that there are no bytes left, apart from hash itself
//(We presume that the caller did not truncate the signature afte exponentiation
// and the dsSize is the equal to modulus size in bytes
if ((dsSize-i)!=SHA256_SIZE) return NULL;
#endif
return pDecryptedSignature+i;
}
30 :
- ;
- , ;
- , .
, .
. , , . , , .
:
, , .
— Python + C. C, 95% . Python . . (, void_p ctypes. 64- 32 ).
Python :
verifier=Verifier(4,4,7)
:
- .
- .
- .
.
. , , , : .
, 256. :
- -, , 2 ( , ). , 5 , .
- -, , .
. , , - . . .
, , 64, . — .
, — .
. , 3 , :
- , "" CRC32;
- , SHA-256;
- , AES-128 CBC.
, . : CRC32, SHA-256, AES. , CRC32 AES, CRC32.
, :
- ( ).
- .
- , 1. proof_count.
- ( proof_count).
- , .
- , , .
- 3.
. (, ). . (simulation mode), . . . , , , . , . , ,
. .
CRC32 SHA-256 , . , (uint16_t), , 8 . , , -. :
. , , . , , . , , .
AES, : . , , . :
. .
, , AES, ( , , ). , SHA-256, ( ), - , .
CRC32, , , . CRC32 . Meet-in-the-Middle (« »), .
: , . . MitM , .. .
Meet-in-the-Middle , CRC32. ,
,
, 6 ( ). CRC32 :
- .
- , ( — , — ).
- .
, 6 :
:
:
CRC32 . , , :
:
- -, .
- . , -. , . .
- : , , , .
: « , , , — , , ». — , . , :
, HASHES — , , , . , 6 :
,
.
4 . . , , — (PRNG ).
C rand, - . Legendre PRF, .
, , , - . , . , ( 0) .
- , , , , . , ( — ) . . , . 50%, , .
. Python :
def LegendrePRNG(a,p):
if a==0:
a+=1
while True:
next_bit=pow(a,(p-1)//2,p)
if next_bit==1:
yield 1
else:
yield 0
a=(a+1)%p
if a==0:
a+=1
32- , Meet-in-the-Middle. , , . , 32- , 32 . , — big-endian little-endian, — .
, . Legendre PRNG. 32 . , (, ).
, . , . , , . , — . , , .
, , . , . , .
, :
- Bleichenbacher’s e=3.
- .
- .
- CRC32.
- .
, .
, , , . - Linux Usermode Kernel CryptoAPI .
, : . SIMD, . , , : . .
, . , : . — . , . . , .
, . , , , :
- .
- , , .
- - .
- .
:
(, ) .
, . .
. .
, .
.
, , , - . , memcpy , SIMD, memcpy . .
- . Zero Knowledge , Python, PEM. , , , .
, .
24 , , . CryptoAPI: AF_ALG, .
, - . .
, , .
, , . , pwn :)
, :
- -, C , . ASAN (Address Sanitizer), .
- -, , , . , . Libfuzzer , .
: . /dev/urandom randrand, ( Legendre PRF, ) srand(0). , . - AES- .
, . , .
, , . , , — : , , .
Legendre PRNG . , . , .
Proof of Knowledge, . , , . , :
- . , . - , SLA ( ).
- , , . . . - , SLA.
- . . , , , . , , . SLA.
(Bushwhackers) SLA 65%, . , scoreboard, .
, , . .
, , . , , . , .
, https://github.com/bi-zone/CTFZone-2020-Finals-LittleKnowledge. , . , ( ) . . , , . , - CTF.
, , !