초보의 아웅다웅 설계하기

Invasive Attack

로망와니 2018. 6. 13. 23:08

금번에 세미나를 다녀왔습니다.

주제중에서 Invasive Attack(Invasive Attack, Semiinvasive attack, Non invasive attack)과 관련된 내용이 있었는데 클럭 어택과 관련한 내용이 흥미로웠습니다.(연구하시는 분들은 예전부터 알고 계셨겠지만 전 처음이었습니다.)

X-TAL의 클럭 입력에서 클럭에 노이즈를 넣으면(한 클럭이 들어가야하는 데 클럭 노이즈를 실어서 2클럭을 집어넣는 경우 같은) 명령어를 뛰어넘어서 처리하는 경우가 있다는 설명이었습니다.

대표적인게 if, else 구문인데요.

 

편하게 8비트 어셈인 PIC로 비교하면 

f레지스터의 비트 b가 0이면 GOTO exit로 가고 그렇지 않으면 GOTO loop로 가는 명령이 있습니다. if else로 프로그램으로 짜면 저렇게 명령어 셋으로 들어가고 하나의 사이클에 하나의 번지씩 이동하게 됩니다.

 

BTFSC f, b

GOTO loop

GOTO exit

 

그런데 입력 클럭에 임의의 노이즈를 넣어서 주는 경우에는 f레지스터의 비트 b가 0이 아닌데도 불구하고  GOTO exit로 나갈 수 있다는 거죠. 그런데 이런 구문이 사용자의 아이디와 패스워드를 입력하고 확인하는 찰나에 들어간다면 틀린 패스워드에서도 정상 패스워드로 인식할 수 있습니다. 큰일이죠.

세미나에서는 이중 if문이나 case문을 제안하였습니다.

 

 제가 교육 갔었던 의료기기 Software V&V에서는 저런 상황 때문인지는 모르지만 if else는 쓰고 case문은 사용하는 것을 지양하라고 했습니다. 이상 상황시 아예 이상한 곳으로 가서 이상동작을 하는 것을 방지하는 차원이었겠지요.(실상 수천, 수만개의 제품을 다양한 곳에서 사용하다보면 전혀 예상하지 못하는 동작을 하는 경우도 있습니다. 그래서 프로그램은 한줄만 짜도 버그가 생길 수 있다고 생각합니다.)

 

이 부분 때문에 고민을 많이해야 할 것 같습니다.

 

또 하나의 마음에 드는 이슈가 있었는데요. 패스워드를 확인하고 처리하는 부분에서 한자리씩 확인한 다음에 틀린 부분에서 바로 빠져 나가는 경우 공격자가 시간을 확인하여 오래 걸리는 정도에 따라 몇자리까지 맞췄는 지 알 수 있는 부분이었습니다.

저도 통상적으로 이렇게 짜왔는데 앞으로는 타이머를 돌려서 맞든 틀리든 간에 일정 시간에 에러나 정상을 리턴하도록 짜야 할 것 같습니다.

 

 

세미나를 듣다보니 SOC를 직접 하는 부분도 상당히 끌렸는데요. 코어나 패리를 만드는 게 아닌 직접 침투를 방어하는 부분에 재미있었습니다. 상하에 랜덤패턴과 랜덤 데이터를 넣어서 비교기에서 서로 데이터가 다를 경우 직접 침투가 발생했다는 것을 알 수 있다는 부분입니다. 특수 칩도 아니고 일반 칩을 내부까지 직접까서 베끼다니 그렇게 까지 해야해? 라고 생각했는데 프린트 잉크 시장의 30%정도가 복사 잉크라고 하고 거기의 칩들이 복제칩이라고 하니 그럴만 하다고 생각했습니다.

 opamp를 넣고 히스테리시스 회로를 추가하여 조금 더 안정되게 만들면 어떨까? 라는 생각도 살짝 해봤습니다.