1 |
1
실행 코드로부터 호출 그래프를 생성하고 PLC에 악영향을 줄 수 있는 표준 라이브러리 함수나 코딩규칙 매뉴얼에서 허용하지 않는 함수들을 탐지하는 함수 새니타이저;실행코드를 역어셈블(disassemble)한 후 포인터 변수에 대한 이상 연산(anomaly operation) 패턴을 탐지하고, 소스코드와 심볼 정보를 이용하여 보안 및 안전에 위협이 될 수 있는 메모리 값 설정이나 변경을 탐지는 포인터 새니타이저;상기 함수 새니타이저와 포인터 새니타이저를 포함하고 실행코드 새니타이저가 구성되어,상기 실행코드 새니타이저는 통합개발환경(IDE)에서 실행 코드(executable code)를 PLC로 다운로드하기 전에 정적으로 분석하여, 상기 함수 새니타이저가 탐지한 PLC에 악영향을 줄 수 있는 표준 라이브러리 함수 및 코딩규칙 매뉴얼에서 허용하지 않는 함수들, 상기 포인터 새니타이저가 탐지한 보안 및 안전에 위협이 될 수 있는 메모리 값 설정이나 변경을 식별하여 제거할 수 있도록 하는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 장치
|
2 |
2
제 1 항에 있어서, 상기 함수 새니타이저는,프로그램 코드 개발자가 개발한 실행 코드로 표현되는 태스크의 함수 리스트를 시그니처 DB(Database)와 비교를 하고,태스크의 함수 리스트는 상기 실행코드로부터 생성된 호출 그래프를 통하여 추출된 함수 명을 포함하는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 장치
|
3 |
3
제 2 항에 있어서, 시그니처 DB는 개발 매뉴얼에서 허용하지 않는 표준 함수나 보안 관점에서 취약한 표준 함수 명을 시그니처로 관리하는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 장치
|
4 |
4
제 2 항에 있어서, 상기 함수 새니타이저에서의 보안 및 안전에 악영향을 줄 수 있는 함수 리스트는 'Buffer Overflow 취약 함수'와 'Memory 취약성 관련 함수'로 구성되고,Buffer Overflow 취약 함수로 'trcat()',trcpy()’, ‘strncpy()’, ‘sprintf()’, ‘vsprintf()’, ‘gets()’, ‘fscanf()’, ‘scanf()’를 포함하고,memory 취약성 관련 함수로 ‘calloc()’, ‘free()’, ‘malloc()’, ‘realloc()’, ‘memcpy()’, ‘memset()’, ‘memmove()’를 포함하는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 장치
|
5 |
5
제 1 항에 있어서, 상기 함수 새니타이저는,상기 실행 코드(executable code)로부터 호출 그래프를 생성하고, 생성된 호출 그래프로부터 시스템 및 프로그램 코드 개발자가 사용하는 함수 명 및 함수 간 호출 관계를 분석하고,프로그램 코드 개발자가 개발한 실행 코드로 표현되는 태스크의 함수 리스트를 시그니처 DB(Database)와 비교를 하여 PLC에 악영향을 줄 수 있는 표준 라이브러리 함수나 코딩규칙 매뉴얼에서 허용하지 않는 함수들을 탐지한 이후, 호출 그래프를 통해 어느 위치에 어떤 함수가 사용되었는지 함수 새니타이저가 파악을 하여, 함수 새니타이저에서 파악한 결과와 소스코드를 비교하여 프로그램 코드 개발자에 의해 PLC에 악영향을 줄 수 있는 표준 라이브러리 함수나 코딩규칙 매뉴얼에서 허용하지 않는 함수들이 포함되었는지 판단하는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 장치
|
6 |
6
제 1 항에 있어서, 상기 포인터 새니타이저는,실행코드를 대상으로 포인터 변수에 대한 이상 연산(anomaly operation) 패턴 탐지 동작을 수행하고, 실행코드를 대상으로 한 이상 연산(anomaly operation) 패턴 탐지가 어려운 경우 소스 코드 분석을 통해 이상 연산(anomaly operation) 패턴 탐지에 필요한 정보를 추출하고,포인터 변수에 직접 주소를 하드코딩하여 특정 값을 설정하는 명령 패턴을 탐지하는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 장치
|
7 |
7
제 6 항에 있어서, 상기 포인터 새니타이저는,소스코드와 심볼 정보를 통해 프로그램 코드 개발자가 개발한 실행 코드로 표현되는 각 태스크의 스택의 범위를,태스크 코드의 시작점을 가리키는 포인터인 인자(App_Task2), 태스크 스택의 시작위치를 가리키는 포인터인 인자(App_TaskPostStk[])를 이용하여, App_TaskPostStk[]가 가리키는 위치는 심볼 정보를 통해 메모리 주소를 확인하고, 스택의 크기를 지정하는 인자(APP_CFG_TASK_STK_SIZE)의 값을 사용하여 태스크의 스택 범위를 확인하여 계산하고,각 태스크에 할당된 주소 범위를 벗어난 포인터 연산을 탐지하여 유효성과 정확도를 개선하는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 장치
|
8 |
8
제 7 항에 있어서, 상기 포인터 새니타이저는,포인터 변수 연산을 탐지하는데 필요한 코드 패턴을 관리하는 패턴 DB를 포함하고,패턴 DB에 유지할 시그니처를 생성하기 위해 적용 대상 PLC의 CPU용 어셈블리 사용 패턴을 분석하는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 장치
|
9 |
9
제 8 항에 있어서, 상기 포인터 새니타이저에서 탐지하고자 하는 패턴은,포인터 변수에 하드코딩된 주소 값을 할당하는 명령들과 포인터 변수가 가리키는 주소번지의 값을 변경하는 명령들로 구성되는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 장치
|
10 |
10
제 9 항에 있어서, 상기 포인터 새니타이저는,기계어 코드를 대상으로 한 포인터 새니타이저를 적용하기 위해 기계어 코드를 역어셈블하여 어셈블리 코드 분석을 하고,포인터 변수에 대한 이상 연산(anomaly operation) 패턴 탐지 동작 수행시에,어셈블리 코드만을 사용해서 하드코딩된 메모리 주소 값을 식별하거나,소스코드를 분석하여 하드코딩된 메모리 주소 값을 식별하는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 장치
|
11 |
11
삭제
|
12 |
12
통합개발환경(IDE)에서 실행 코드(executable code)를 PLC로 다운로드하기 전에 정적으로 분석하여, 함수 새니타이저가 탐지한 PLC에 악영향을 줄 수 있는 표준 라이브러리 함수나 코딩규칙 매뉴얼에서 허용하지 않는 함수을 식별하여 제거할 수 있도록 하기 위하여,함수 새니타이저가 실행 코드(executable code)로부터 호출 그래프를 생성하는 단계;생성된 호출 그래프로부터 시스템 및 프로그램 코드 개발자가 사용하는 함수 명 및 함수 간 호출 관계를 분석하는 단계;프로그램 코드 개발자가 개발한 실행 코드로 표현되는 태스크의 함수 리스트를 시그니처 DB(Database)와 비교를 하는 단계;PLC에 악영향을 줄 수 있는 표준 라이브러리 함수나 코딩규칙 매뉴얼에서 허용하지 않는 함수들을 탐지하고, 호출 그래프를 통해 어느 위치에 어떤 함수가 사용되었는지 함수 새니타이저가 파악을 하는 단계;함수 새니타이저에서 파악한 결과와 소스코드를 비교하여 프로그램 코드 개발자에 의해 PLC에 악영향을 줄 수 있는 표준 라이브러리 함수나 코딩규칙 매뉴얼에서 허용하지 않는 함수들이 포함되었는지 판단하는 단계;를 수행하는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 방법
|
13 |
13
제 12 항에 있어서, 시그니처 DB는 개발 매뉴얼에서 허용하지 않는 표준 함수나 보안 관점에서 취약한 표준 함수 명을 시그니처로 관리하는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 방법
|
14 |
14
제 12 항에 있어서, 상기 함수 새니타이저에서의 보안 및 안전에 악영향을 줄 수 있는 함수 리스트는 'Buffer Overflow 취약 함수'와 'Memory 취약성 관련 함수'로 구성되고,Buffer Overflow 취약 함수로 'trcat()',trcpy()’, ‘strncpy()’, ‘sprintf()’, ‘vsprintf()’, ‘gets()’, ‘fscanf()’, ‘scanf()’를 포함하고,memory 취약성 관련 함수로 ‘calloc()’, ‘free()’, ‘malloc()’, ‘realloc()’, ‘memcpy()’, ‘memset()’, ‘memmove()’를 포함하는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 방법
|
15 |
15
통합개발환경(IDE)에서 실행 코드(executable code)를 PLC로 다운로드하기 전에 정적으로 분석하여 포인터 새니타이저가 탐지한 보안 및 안전에 위협이 될 수 있는 메모리 값 설정이나 변경을 식별하여 제거할 수 있도록 하기 위하여,포인터 새니타이저가 소스코드와 심볼 정보를 통해 프로그램 코드 개발자가 개발한 실행 코드로 표현되는 각 태스크의 스택의 범위를, 태스크 코드의 시작점을 가리키는 포인터인 인자(App_Task2), 태스크 스택의 시작위치를 가리키는 포인터인 인자(App_TaskPostStk[])를 이용하여, App_TaskPostStk[]가 가리키는 위치는 심볼 정보를 통해 메모리 주소를 확인하고, 스택의 크기를 지정하는 인자(APP_CFG_TASK_STK_SIZE)의 값을 사용하여 태스크의 스택 범위를 확인하여 계산하는 단계;태스크의 소스코드 내부에 포인터 변수가 있는지를 확인하고, 포인터 변수에 메모리 주소를 하드코딩 하는지 확인하는 단계;포인터 변수에 입력되는 주소 값이 해당 태스크의 스택 범위를 벗어나는 경우 이를 탐지하는 단계;를 포함하는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 방법
|
16 |
16
제 15 항에 있어서, 상기 포인터 새니타이저는,실행코드를 대상으로 포인터 변수에 대한 이상 연산(anomaly operation) 패턴 탐지 동작을 수행하고, 실행코드를 대상으로 한 이상 연산(anomaly operation) 패턴 탐지가 어려운 경우 소스 코드 분석을 통해 이상 연산(anomaly operation) 패턴 탐지에 필요한 정보를 추출하고,포인터 변수에 직접 주소를 하드코딩하여 특정 값을 설정하는 명령 패턴을 탐지하는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 방법
|
17 |
17
제 16 항에 있어서, 상기 포인터 새니타이저는,포인터 변수 연산을 탐지하는데 필요한 코드 패턴을 관리하는 패턴 DB를 포함하고,패턴 DB에 유지할 시그니처를 생성하기 위해 적용 대상 PLC의 CPU용 어셈블리 사용 패턴을 분석하는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 방법
|
18 |
18
제 16 항에 있어서, 상기 포인터 새니타이저에서 탐지하고자 하는 패턴은,포인터 변수에 하드코딩된 주소 값을 할당하는 명령들과 포인터 변수가 가리키는 주소번지의 값을 변경하는 명령들로 구성되는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 방법
|
19 |
19
제 16 항에 있어서, 상기 포인터 새니타이저는,기계어 코드를 대상으로 한 포인터 새니타이저를 적용하기 위해 기계어 코드를 역어셈블하여 어셈블리 코드 분석을 하고,포인터 변수에 대한 이상 연산(anomaly operation) 패턴 탐지 동작 수행시에,어셈블리 코드만을 사용해서 하드코딩된 메모리 주소 값을 식별하거나,소스코드를 분석하여 하드코딩된 메모리 주소 값을 식별하는 것을 특징으로 하는 코딩 규칙 기반으로 PLC용 안전한 프로그래밍을 지원하기 위한 방법
|