산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial Internet of Things >> 임베디드

텍스트 문자열이 임베디드 소프트웨어의 취약점입니까?

수년 동안 데스크탑 컴퓨터의 보안은 관심사였습니다. 기계가 인터넷에 연결되면 본질적으로 일종의 공격 가능성이 있습니다. 이러한 침투는 데이터를 훔치거나 시스템을 손상시키거나 어떤 식으로든 작동을 변경하는 것일 수 있습니다. 보호 수단은 잘 알려져 있으며 널리 적용됩니다. 임베디드 시스템은 네트워크에 거의 연결되지 않았고 코드가 일반적으로 일종의 ROM에 있었기 때문에 항상 이러한 문제에 영향을 받지 않는 것처럼 보였습니다. 여러가지가 바뀌었다. 최신 시스템의 상당 부분이 인터넷에 연결되어 있으며 코드를 RAM에 복사하여 RAM에서 실행하는 것이 일반적입니다. 이는 보안이 이제 중요한 임베디드 소프트웨어 설계 고려 사항임을 의미합니다.

영어는 훌륭한 커뮤니케이션 도구입니다. 그것은 매우 정확하고 미묘하게 의사 소통을 가능하게하는 매우 표현적인 언어입니다. 그러나 일상적인 말에서 우리 대부분은 게으르고 종종 100% 정확도가 없는 단어를 사용합니다. 여기서 내가 염두에 두고 있는 예는 안전보안 동의어인 것처럼 거의 같은 의미로 사용됩니다. 내가 들은 가장 좋은 정의는 다음과 같다고 생각합니다. 안전은 장치로부터 세상을 보호하는 과정입니다. 보안은 세상으로부터 장치를 보호하는 것입니다. 오늘의 주제는 보안입니다.

시스템이 완전히 방탄해야 하는 경우 산업 등급 암호화가 필요합니다. 이를 위해서는 일반적으로 특정 하드웨어 지원이 필요하며, 이러한 지원은 쉽게 사용할 수 있지만 높은 보안이 필요하지 않은 응용 프로그램에는 과잉으로 간주될 수 있습니다. 그러한 경우에는 다른 옵션이 있으며 그것이 제가 탐구하고 싶은 것입니다.

해커가 장치의 메모리 내용에 액세스할 수 있으면 장치가 하는 일과 수행 방법을 알아낼 수 있습니다. 이것은 작동을 변경하는 첫 번째 단계입니다. 코드가 분해될 수 있으므로 논리가 드러날 수 있습니다. 암호화가 없으면 이를 방지하기 위해 할 수 있는 일이 거의 없습니다. 해커가 다음으로 할 수 있는 일은 데이터의 16진수/ASCII 덤프를 보고 의미 있는 내용을 찾는 것입니다. 그들은 패턴과 인식 가능한 구조를 찾고 있습니다. 여기에서 몇 가지 예방 조치를 취할 수 있습니다. 암호화는 옵션이 아닐 수 있지만 난독화는 가능합니다.

데이터 난독화의 목표는 단순히 데이터를 식별할 수 없도록 만들어 해커를 지연시키거나 저지하는 것입니다. 메모리 덤프를 검색할 때 쉽게 찾을 수 있는 것 중 하나는 텍스트 문자열입니다. 이것이 제가 여기서 집중할 것입니다.

C/C++ 코드에서 텍스트 문자열은 일반적으로 널 바이트로 끝나는 ASCII 코드를 포함하는 바이트 시퀀스입니다. 알아보기 쉽기 때문에 바꿔보겠습니다. 첫째, 널 종결자 대신 각 문자열의 첫 번째 바이트가 길이 지정자가 됩니다. 문자열의 문자는 데이터를 약간 스크램블하여 덜 친숙하게 보이게 합니다. 내가 할 일은 각 바이트의 두 니블을 바꾸는 것뿐입니다. 일반 텍스트 문자열을 제공하고 적절한 초기화를 통해 배열에 대한 선언을 생성하는 유틸리티 프로그램이 필요합니다. 다음은 이 유틸리티의 핵심 기능입니다.

void scramble(int index, unsigned char *input){ unsigned char *charpointer, character; printf("unsigned char string%d[%d] ={0x%02x,", index, strlen(input)+1, strlen(input)); 문자 포인터 =입력; while(*charpointer) { 문자 =*charpointer++; 문자 =((문자 &0x0f) <<4) | ((문자 &0xf0)>> 4); printf("0x%02x", 문자); if (*charpointer) printf(","); } printf("}; // \"%s\"\n", 입력);}

이 함수에 인덱스 4와 "Hello world"(원본 eh?) 문자열을 전달하면 출력은 다음과 같습니다.

<미리>부호 없는 char string4[12] ={0x0b, 0x84, 0x56, 0xc6, 0xc6, 0xf6, 0x02, 0x77, 0xf6, 0x27, 0xc6, 0x46}; // "안녕하세요"

이것을 복사하여 코드에 붙여넣을 수 있습니다. 그런 다음 텍스트를 표시해야 할 때 텍스트를 해독하는 함수를 작성하기만 하면 됩니다. 각 문자열에 색인 번호를 지정하는 대신 index 문자열이 있는 매개변수. 주석이 문자열을 읽을 수 있는 형식으로 보여주기 때문에 생성된 코드는 다소 자체 문서화되지만, 물론 이것은 소스 코드에만 나타납니다. 해커가 귀하의 소스 코드에 액세스할 수 있다면 귀하는 충분히 문제가 있어 제가 더 이상 도움을 드릴 수 없습니다!

다음은 스크램블 해제 프로세스를 설명하는 몇 가지 코드입니다.

void main(){ unsigned char temp, buffer[50]; 정수 카운트 =string4[0], 인덱스=0; while(count--) { temp =string4[index+1]; 온도 =((온도 &0x0f) <<4) | ((온도 &0xf0)>> 4); 버퍼[인덱스] =임시; 인덱스++; } 버퍼[색인] =0; printf("-%s-\n", 버퍼);}

각 바이트의 니블 교환은 스크램블을 수행할 수 있는 여러 가지 방법 중 하나입니다. 또 다른 가능성은 각 문자를 3비트씩 왼쪽으로 회전하는 것입니다. 다음은 이를 수행하는 몇 가지 코드입니다.

unsigned char leftrotate3(unsigned char c){ c =(c <<3) | (c>> 5); 반환 c;}

내가 설명한 난독화 기술은 문자열을 문자별로 스크램블합니다. 대신 전체 문자열에 대해 작업을 수행할 수 있습니다. 예를 들어 문자열을 긴 비트 시퀀스로 처리하고 임의의 수만큼 왼쪽으로 회전합니다. 이 알고리즘의 코딩은 더 열성적인 독자에게 맡기겠습니다.

모든 텍스트 문자열을 현지화할 때의 부작용은 다른 언어에 대해 다른 버전의 소프트웨어를 만드는 것이 매우 간단하다는 것입니다.

데이터 난독화는 방탄과 거리가 멀고 기껏해야 심각한 해커의 속도를 늦출 것이라는 점을 반복하고 강조해야 합니다. 다른 것이 없으면 스크램블 해제 코드가 분해될 수 있습니다. 이 기술의 트릭은 난독화를 따라가기 힘든 경로로 만드는 것입니다. 더 강력한 보안이 필요한 경우 전체 암호화를 살펴봐야 합니다.


임베디드

  1. 피아노
  2. 자동차의 임베디드 시스템 역할
  3. 임베디드 시스템 및 애플리케이션의 기본
  4. 진정으로 필수적인 3D 인쇄 워크플로 소프트웨어의 10가지 기능
  5. 임베디드 에지를 위한 SOAFEE 아키텍처는 소프트웨어 정의 자동차를 가능하게 합니다.
  6. DevOps를 사용하여 임베디드 소프트웨어 문제 해결
  7. 로봇이 공장을 폐쇄하고 있습니까?
  8. 임베디드 소프트웨어가 하드웨어 공급망의 성격을 바꾸고 있습니다.
  9. 스마트 팩토리를 위한 소프트웨어 상호 연결의 이점은 무엇입니까?
  10. 종교 기관이 시설 관리 소프트웨어를 구현하는 이유