KR20110024987A - Method for kernel hardening of usb device driver in linux operating system and apparatus thereof - Google Patents
Method for kernel hardening of usb device driver in linux operating system and apparatus thereof Download PDFInfo
- Publication number
- KR20110024987A KR20110024987A KR1020090083200A KR20090083200A KR20110024987A KR 20110024987 A KR20110024987 A KR 20110024987A KR 1020090083200 A KR1020090083200 A KR 1020090083200A KR 20090083200 A KR20090083200 A KR 20090083200A KR 20110024987 A KR20110024987 A KR 20110024987A
- Authority
- KR
- South Korea
- Prior art keywords
- value
- kernel
- hardening
- usb device
- error
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Human Computer Interaction (AREA)
- Information Transfer Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
Description
본 발명은 리눅스 운영체제 기반의 시스템에서 USB 디바이스를 사용하는 경우에 시스템 정지 현상(panic)을 방지하고 시스템의 안정성을 도모하기 위하여, 리눅스 운영체제에서 DLM(Dynamic Linking Module) 기술을 이용하여 USB 디바이스 드라이버에서 커널 하드닝을 구현하는 방법 및 장치에 관한 것이다.The present invention provides a USB device driver using the DLM (Dynamic Linking Module) technology in the Linux operating system to prevent system panic and improve system stability when using a USB device in a Linux operating system-based system. A method and apparatus for implementing kernel hardening.
리눅스는 대형 기종에서나 작동하던 운영체제인 유닉스를 소형 PC에서도 작동할 수 있도록 만든 컴퓨터 기본 운영체제이다. 리눅스는 프로그램 소스코드가 무료로 공개되어 있어 프로그래머가 원하는대로 분석하고 수정할 수 있고, 더욱이 어느 플랫폼에도 포팅이 가능하다는 장점이 있다.Linux is a computer-based operating system that allows Unix, an operating system that used to work on large machines, to run on small PCs. Linux has the advantage that the program source code is freely available, so that programmers can analyze and modify it as they wish, and even port it to any platform.
이러한 리눅스 운영체제는 공개 소스(open source)의 특징을 이용하여 임베디드 시스템 분야에서도 널리 이용되고 있으며, 기업에서는 웹 서버, 파일 서버, DB 서버 등으로 활용되고 있다. 리눅스 운영체제에서는 리눅스 커널 소스를 수정하여 파일 시스템, 디바이스 드라이버 등을 커널에 추가할 수도 있다. The Linux operating system is widely used in the embedded system field by using an open source feature, and a company is used as a web server, a file server, a DB server, and the like. In the Linux operating system, you can modify the Linux kernel source to add file systems, device drivers, etc. to the kernel.
그러나 리눅스 운영체제 커널 소스를 잘못 수정하거나 커널 모률 프로그램을 잘못 작성한 경우에는 시스템 동작의 실패와 직결된다. 잘못된 코드가 커널에 있을 경우에는 시스템이 정지되는 현상이 발생한다. 즉, 리눅스 운영체제 커널에서 잘못된 연산이나 잘못된 프로그램으로 인하여 시스템이 정지하게 되는 현상이 발생할 수 있다. 이러한 현상을 시스템 패닉(panic)이라고 하는데, 시스템 패닉으로 인하여 시스템이 어느 순간 정지된다면 각종 서비스를 이용하던 중에 큰 문제가 발생될 수 있다. 심각한 경우에는 데이터가 파괴되기도 한다. However, incorrectly modifying the Linux operating system kernel source or writing a kernel kernel program can lead to system failure. If the wrong code is in the kernel, the system hangs. In other words, the system may hang due to an incorrect operation or wrong program in the Linux operating system kernel. This phenomenon is called a system panic. If the system is stopped for a while due to the system panic, a big problem may occur while using various services. In serious cases, data can be destroyed.
커널 하드닝(kernel hardening) 기술은 운영체제 커널 내에서 잘못된 코드로 인하여 시스템이 정지되는 것을 정상적으로 복구함으로써 시스템이 정상 동작되도록 하는 기술이다. Kernel hardening technology is a technology that allows a system to operate normally by recovering from a system hang due to incorrect code in an operating system kernel.
커널 하드닝 기술을 운용하는 운영체제에서는 현재 프로세스가 패닉으로 들어가는 경우에 시스템을 정지시키지 않고 현재 프로세스를 검사하여 복구가 가능한지 복구가 불가능한지를 판단하여, 복구가 불가능하다고 판단되는 경우에는 패닉 상태를 발생시키고, 복구가 가능하다고 판단되는 경우에 한하여 복구를 하여 시스템이 정지되지 않고 정상적으로 동작되도록 한다.In the operating system operating kernel hardening technology, if the current process enters the panic, the current process is examined without stopping the system to determine whether the recovery is possible or not. Only when it is determined that the recovery is possible, the system can be restored so that the system can operate normally without stopping.
본 발명의 목적은 리눅스 운영체제에서 USB 디바이스를 사용하는 경우에 USB 디바이스로 인하여 발생할 수 있는 시스템 정지 현상(panic)을 줄이고, 시스템을 안정적으로 운용할 수 있는 방법과 그 장치를 제공하는 것이다.SUMMARY OF THE INVENTION An object of the present invention is to provide a method and an apparatus capable of stably operating a system and reducing system panic caused by a USB device when using a USB device in a Linux operating system.
상기 목적을 달성하기 위한 본 발명의 일 실시예에 따른 커널 하드닝 방법은 리눅스 운영체제(OS: Operating System) 기반의 시스템에서 USB 디바이스 드라이버의 커널 하드닝을 수행하는 방법에 있어서, 상기 USB 디바이스의 연결을 인식하여 동적으로 USB 디바이스 드라이버 모듈을 시스템 커널로 로딩하는 단계; 및 상기 로딩된 모듈에 구비된 시스템 커널의 오류에 대한 커널 하드닝(kernel hardening) 함수를 이용하여 커널 하드닝을 수행하는 단계를 포함한다.Kernel hardening method according to an embodiment of the present invention for achieving the above object is a method for performing kernel hardening of the USB device driver in a Linux operating system (OS) based system, the connection of the USB device Recognizing and dynamically loading the USB device driver module into the system kernel; And performing kernel hardening by using a kernel hardening function for an error of a system kernel provided in the loaded module.
한편, 상기 목적을 달성하기 위한 본 발명의 다른 실시예에 따른 커널 하드닝 장치는 USB 디바이스의 연결을 인식하여 동적으로 USB 디바이스 드라이버 모듈을 시스템 커널로 로딩하는 I/O 인터페이스부; 및 상기 로딩된 모듈에 구비된 시스템 커널의 오류에 대한 커널 하드닝(kernel hardening) 함수를 이용하여 커널 하드닝을 수행하는 커널 하드닝부를 포함한다.On the other hand, kernel hardening apparatus according to another embodiment of the present invention for achieving the above object is an I / O interface unit for recognizing the connection of the USB device to dynamically load the USB device driver module into the system kernel; And a kernel hardening unit that performs kernel hardening by using a kernel hardening function for an error of a system kernel included in the loaded module.
아울러, 리눅스 운영체제 기반의 시스템에서 USB 디바이스 드라이버의 커널 하드닝을 수행하는 방법을 컴퓨터상에서 실행시키기 위한 프로그램이 기록된 기록 매체 또한 포함한다.In addition, the present invention also includes a recording medium on which a program for executing kernel hardening of a USB device driver on a computer in a Linux operating system-based system is recorded.
본 발명과 본 발명의 동작상의 이점 및 본 발명의 실시에 의하여 달성되는 목적을 충분히 이해하기 위해서는 본 발명의 바람직한 실시예를 예시하는 첨부 도면 및 도면에 기재된 내용을 참조하여야 한다. DETAILED DESCRIPTION In order to fully understand the present invention, the operational advantages of the present invention, and the objects achieved by the practice of the present invention, reference should be made to the accompanying drawings which illustrate preferred embodiments of the present invention and the contents described in the drawings.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예에 대해 상세히 설명한다.Hereinafter, with reference to the accompanying drawings will be described in detail a preferred embodiment of the present invention.
본 발명에서는 리눅스 운영체제의 시스템에 USB 디바이스가 연결된 상태에서 패닉(panic)이 발생하는 경우, 이를 컨트롤하여 시스템이 정상적으로 동작할 수 있도록 하는 커널 하드닝 기법을 제안한다.The present invention proposes a kernel hardening technique that allows a system to operate normally by controlling a panic when a USB device is connected to a system of a Linux operating system.
커널(kernel)은 컴퓨터 운영체제의 가장 중요한 핵심으로서, 운영체제의 다른 모든 부분에 여러 가지 기본적인 서비스를 제공한다. 일반적으로, 커널에는 종료된 입출력 연산 등의 커널 서비스를 경쟁적으로 요구하는 모든 요청들을 처리하는 인터럽트 처리기와, 어떤 프로그램들이 어떤 순서로 커널의 처리시간을 공유할 것인지를 결정하는 스케줄러, 및 스케줄이 끝나면 실제로 각 프로세스들에게 컴퓨터의 사용권을 부여하는 슈퍼바이저 등이 포함되어 있다. 커널은 또한, 메모리나 저장장치 내에서 운영체제의 주소공간을 관리하고, 이들을 모든 주변장치들과 커널의 서비스들을 사용하는 다른 사용자들에게 골고루 나누어주는 메모리 관리자를 가지고 있다. 커널의 서비스는 운영체제의 다른 부분이나 시스템 호출 함수라고 알려진 일련의 프로그램 인터페이스들을 통해 요청된다. 커널을 유지하기 위한 코드는 지속적으로(정적으로) 사용되기 때문에, 보통 커널은 자주 사용되지 않는 운영체제의 나머지 부분에 의해 덮어씌워져 훼손되지 않도록 보호된 메모리 영역에 적재된다.The kernel is the most important core of a computer operating system, providing several basic services to all other parts of the operating system. In general, the kernel has an interrupt handler that handles all requests that competitively require kernel services, such as terminated I / O operations, a scheduler that determines which programs share the kernel's processing time, and in what order. In fact, it includes a supervisor that grants each computer a license. The kernel also has a memory manager that manages the operating system's address space in memory or storage and distributes it evenly among all peripherals and other users of the kernel's services. Kernel services are requested through different parts of the operating system or through a set of program interfaces known as system call functions. Because the code to maintain the kernel is used continuously (statically), the kernel is usually loaded in an area of memory that is protected from being corrupted by being overwritten by the rest of the operating system.
한편, USB 디바이스는 직렬 포트의 일종으로 기존의 외부 확장 포트의 느린 속도와 제한된 장치 연결 문제를 해결하여, 오디오 플레이어, 키보드, 마우스, 인터넷 전화, 스캐너 및 프린터 등과 같은 여러 주변장치와 컴퓨터 사이를 연결하는 플러그-앤드-플레이(plug and play) 인터페이스이다. 따라서, 상시적으로 플러그인 되어 있는 것이 아니라 상황과 필요에 따라 각종 주변기기들을 탈/부착하여 사용할 수 있으므로, 이에 대한 USB 디바이스 드라이버 또한 그때마다 새롭게 OS 커널로 로딩된다. USB devices, on the other hand, are a type of serial port that solves the slow speed and limited device connectivity issues of traditional external expansion ports, allowing connections between computers and peripherals such as audio players, keyboards, mice, Internet phones, scanners, and printers. Is a plug-and-play interface. Therefore, it is not always plugged in, but various peripheral devices can be attached / removed and used according to the situation and needs, so that the USB device driver is also loaded into the OS kernel each time.
본 발명에서는 리눅스 OS 커널의 동적 적재 모듈(DLM: Dynamic Linking Module)을 이용하여, USB 디바이스가 시스템에 연결된 때에 일어날 수 있는 시스템 정지 현상(panic)을 제어하는 방법을 제안한다. 동적 적재 모듈(DLM)은 리눅스 커널에서 매우 중요한 혁신 기술 중 하나로서, DLM 모듈로 인하여 리눅스 OS 커널은 필요에 따라 유동적으로 커널의 기능을 확장할 수 있다.The present invention proposes a method of controlling a system panic that may occur when a USB device is connected to a system by using a dynamic linking module (DLM) of the Linux OS kernel. Dynamic Load Module (DLM) is one of the most important innovations in the Linux kernel. The DLM module allows the Linux OS kernel to dynamically expand the kernel's functionality as needed.
커널 하드닝 기능 중 또 다른 하나는 ASSERT() 함수를 이용하여 커널 내에서 사용하는 변수의 유형에 따라 값 형태(value type)인 경우에 잘못된 값을 가진 변수에 대해서 정확한 값으로 강제 설정을 하는 경우와 주소 형태(address type)인 경우에 시스템 패닉을 유발하는 경우를 들 수 있다.Another one of the kernel hardening functions is to use the ASSERT () function to force the correct value for the variable with the wrong value in the case of the value type according to the variable type used in the kernel. And address type may cause system panic.
도 1에는 USB 드라이버의 usb-uhci.c 소스 코드에 패닉이 발생할 수 있는 상황에서 이를 복구할 수 있는 USB_ASSERT() 매크로 함수의 소스 코드가 나타나 있다. 아울러, 도 5는 USB 디바이스 드라이버의 커널 하드닝을 수행하는 방법을 설명하기 위한 플로우 차트이다.Figure 1 shows the source code of the USB_ASSERT () macro function to recover from a situation where panic may occur in the usb-uhci.c source code of the USB driver. 5 is a flowchart illustrating a method of performing kernel hardening of a USB device driver.
먼저, 도 5를 참조하여 본 발명의 일 실시예에 따른 동작 과정을 살펴보면, 먼저 리눅스 운영체제 기반의 시스템에 USB 디바이스가 연결이 될 때 USB 디바이스의 연결을 인식하여 동적으로 USB 디바이스 드라이버 모듈을 시스템 커널로 로딩하고(510), 이렇게 로딩된 모듈에 구비된 커널 하드닝(kernel hardening) 함수를 이용하여 시스템 커널의 오류에 대한 커널 하드닝을 수행한다(520). 커널 하드닝을 수행하는 과정을 통하여 시스템 커널을 수행하는데 필요한 데이터값(data value)에 대하여 오류가 발생한 경우에는 시스템을 복구하고, 메모리 주소값(memory address)에 대하여 오류가 발생한 경우에는 시스템에 대하여 패닉(panic)을 발생시킨다. 이에 대하여 동작 과정을 보다 상세히 살펴보면, 오류가 발생한 변수의 타입을 판단하여(530), 값 형태(value type)의 케이스인 경우에는 함수에 입력된 인자값 중 정상상태의 조건값을 이용하여 오류를 나타내는 인자값을 강제 설정함으로써 시스템을 복구하지만(540), 상기 판단 결과가 주소 형태(address type)인 경우에 오류가 발생한 파일명 및 실행 코드 라인을 사용자에게 표시하고(550), 시스템 패닉을 발생시키게 된다(560). First, referring to FIG. 5, an operation process according to an embodiment of the present invention will be described. First, when a USB device is connected to a Linux OS-based system, a USB device driver module is dynamically recognized by a USB device driver module. In
이러한 커널 하드닝이 구현된 실제 프로그램 코드의 예시를 도 1을 참조하여 이하 살펴본다. 도 1의 S110에서 "expr1"은 패닉이 발생되는 변수이고, "expr2"는 패닉이 발생되지 않은 정상적인 상태에서의 조건값이며, "expr3"는 USB_ASSERT() 함수가 값 형태(value type)인지 주소 형태(address type)인지를 나타내는 인자이다. 따라서, "expr3"의 값에 의하여 "expr2"의 변수타입이 구분된다.An example of actual program code in which such kernel hardening is implemented is described below with reference to FIG. 1. In S110 of FIG. 1, "expr1" is a variable in which a panic is generated, "expr2" is a condition value in a normal state without a panic, and "expr3" is an address indicating whether the USB_ASSERT () function is a value type. It is an argument that indicates whether it is an address type. Therefore, the variable type of "expr2" is distinguished by the value of "expr3".
S120을 참조하면, 세번째 인자값인 "expr3"가 "1"인 경우에 "expr2"은 address의 변수타입이며, "expr1"으로 잘못된 값이 전달되어 오류가 발생하는 경우에 복구가 불가능해진다. 따라서, 내부적으로 panic() 함수가 호출되고 이때, "printk("\n error USB_ASSERT3. \n",_FILE_ ":%d: Assertion ",#"expr2" " failed! \n",_LINE_);" 라는 메시지가 커널단에서 출력된다. Referring to S120, when the third argument value "expr3" is "1", "expr2" is a variable type of address, and when an error occurs because an incorrect value is passed to "expr1", recovery is impossible. Therefore, the panic () function is called internally, at this time, "printk (" \ n error USB_ASSERT3. \ N ", _ FILE_":% d: Assertion ", #" expr2 "" failed! \ N ", _ LINE_);" Is printed at the kernel level.
여기서, "_FILE_"은 현재 오류가 발생한 파일의 이름을 의미하고, "_LINE_"은 오류가 발생한 파일에서의 해당라인을 의미한다. 도 1의 소스코드는 usb-uhci-deu.c 파일에의 printk() 함수가 들어있는 라인의 번호를 출력하여 오류가 발생하였을 때, 어떤 파일의 몇 번째 라인에서 오류가 발생하였는지를 쉽게 찾을 수 있도록 해준다.Here, "_FILE_" means the name of the file in which the current error occurred, and "_LINE_" means the corresponding line in the file in which the error occurred. The source code of Figure 1 prints the number of the line containing the printk () function in the usb-uhci-deu.c file so that when the error occurs, it is easy to find out which line of the file the error occurred. Do it.
아울러 S130을 참조하면, "expr3"의 값이 "2"인 경우에 "expr2"의 변수타입이 value로서 잘못된 "expr1"의 값이 들어와도 이를 바로잡아 줄 수 있는 "expr2"의 value가 있기 때문에 복구가 가능하며 패닉이 발생하지 않게 된다. 즉, 정상값인 "expr2"를 "expr1"에 강제적으로 할당함으로써 복구가 가능한 것이다.In addition, referring to S130, when the value of "expr3" is "2", the value of "expr2" can be corrected even if an incorrect value of "expr1" is entered as the variable type of "expr2" is value. Is possible and no panic will occur. That is, recovery is possible by forcibly assigning the normal value "expr2" to "expr1".
이하, 도 2에서는 usb-uhci-deu.c 파일에 추가한 USB_ASSERT() 매크로가 정상적으로 동작하는지를 테스트하기 위하여, USB 디바이스를 시스템에 연결하면 동작하는 uhci_interrupt() 함수에 USB_ASSERT() 매크로 함수를 구현한 예가 나타나있다. Hereinafter, in FIG. 2, in order to test whether the USB_ASSERT () macro added to the usb-uhci-deu.c file operates normally, the USB_ASSERT () macro function is implemented in the uhci_interrupt () function that operates when the USB device is connected to the system. An example is shown.
도 2을 참조하면, 오류를 일으키는 변수 t를 먼저 선언되고(S210), 이는 이후에 "---USB kernel hardening---"로 표시된 부분(S220) 아래에 사용된 USB_ASSERT() 매크로 함수(S250)에서 중요한 변수로 다루어진다. Referring to FIG. 2, a variable t causing an error is first declared (S210), which is then used as a USB_ASSERT () macro function (S250) below the portion (S220) denoted by “--- USB kernel hardening ---”. ) Are treated as important variables.
먼저 변수 "t"에 "0"이라는 잘못된 값이 할당되고(S230), USB_ASSERT() 매크로 함수의 첫번째 인자값으로 상기 "t"가 입력된다. USB_ASSERT() 매크로의 두번째 인자값으로는 정상적 조건값인 예시값 "5"가 입력된다. 정상적으로 USB_ASSERT() 매크로가 동작하게 되면 USB_ASSERT() 매크로 함수 이후에 "t"값은 "5"로 변경된다. 이를 확인하기 위하여 USB_ASSERT() 매크로 함수를 수행하기 전(S240)과 후(S260)에 printk() 함수를 사용하여 "t" 변수의 값을 확인할 수 있다.First, an incorrect value of “0” is assigned to the variable “t” (S230), and “t” is input as the first argument value of the USB_ASSERT () macro function. As the second parameter value of the USB_ASSERT () macro, an example value "5", which is a normal condition value, is input. If the USB_ASSERT () macro works normally, the "t" value changes to "5" after the USB_ASSERT () macro function. To check this, the value of the "t" variable can be checked using the printk () function before (S240) and after (S260) before executing the USB_ASSERT () macro function.
도 3에는 USB_ASSERT() 매크로 함수를 이용하여 usb-uhci-deu.c 파일에 inw() 함수의 오류를 방지하는 USB_ASSERT_INW() 매크로 함수가 나타나 있다. 3 illustrates a USB_ASSERT_INW () macro function that prevents an error of the inw () function in the usb-uhci-deu.c file by using the USB_ASSERT () macro function.
USB_ASSERT_INW() 매크로 함수를 이용하여 inw() 함수의 오류를 방지하는 방법을 도 6을 참조하여 설명하면, 먼저 리눅스 운영체제 기반의 시스템에 USB 디바이스가 연결이 될 때 USB 디바이스의 연결을 인식하여 동적으로 USB 디바이스 드라이버 모듈을 시스템 커널로 로딩하고(610), 이렇게 로딩된 모듈에 구비된 커널 하드닝(kernel hardening) 함수를 이용하여 시스템 커널의 오류에 대한 커널 하드닝을 수행한다(620). 커널 하드닝을 수행하는 과정에 있어서, inw() 함수와 같은 시스템 호출 함수를 이용하여 입출력(I/O) 포트에 접속된 USB 디바이스를 판독하고(630), 판독된 시스템 호출 함수의 결과값에 따라 플래그값을 선택적으로 설정한다(640). 즉, 마킹된 플래그값이 "0" 또는 "1"인지를 판단하여(650), 예를 들어 플래그값이 "1"인 경우에 panic() 함수를 호출할 수 있다(660).Referring to FIG. 6, a method of preventing an error of an inw () function using the USB_ASSERT_INW () macro function is described first. When a USB device is connected to a Linux operating system, the USB device is recognized and dynamically connected. The USB device driver module is loaded into the system kernel (610), and kernel hardening for an error of the system kernel is performed using the kernel hardening function included in the loaded module (620). In the process of performing kernel hardening, a USB device connected to an input / output (I / O) port is read using a system call function such as an inw () function (630), and the result value of the read system call function is read. In
상기 동작 과정이 구현된 실제 프로그램 코드의 예시를 도 3을 참조하여 살펴보면, 도 3에서 USB_ASSERT_INW() 매크로 역시 USB_ASSERT() 매크로와 동일하게 3개의 인자값으로 구성되어 있다(S310). An example of the actual program code in which the above operation is implemented will be described with reference to FIG. 3. In FIG. 3, the USB_ASSERT_INW () macro also has three parameter values in the same manner as the USB_ASSERT () macro (S310).
먼저 "expr1"은 오류 여부를 확인하고자 하는 변수이고, "expr2"는 inw() 함수에 들어갈 인자이다. inw()함수는 입출력(I/O) 인터페이스에 대해 프로토타입이 unsigned short inw(unsigned short port)인 시스템 호출 함수이다. "expr3"는 패닉 플래그(flag)값이다.First, "expr1" is a variable to check for errors, and "expr2" is an argument to the inw () function. The inw () function is a system call function whose prototype is unsigned short inw (unsigned short port) for the I / O interface. "expr3" is a panic flag value.
S320을 참조하면, "expr2"를 인자값으로 하는 inw() 함수의 결과값을 "expr1"에 할당하고, 이후 조건문에서 "expr1"의 값이 비정상적인 값(즉, NULL)이면 "expr3"에 "1"을 할당하고, 정상적인 값이면 "expr3"에 "0"을 할당한다.Referring to S320, the result of the inw () function having "expr2" as an argument value is assigned to "expr1". If the value of "expr1" is an abnormal value (that is, NULL) in the conditional statement, "expr3" is replaced with " 1 ". If it is a normal value, it assigns" 0 "to" expr3 ".
즉, "expr3"는 inw()함수의 결과값이 비정상적이면 "1" 을, 정상적이면 "0"의 값을 가짐으로써 플래그 역할을 한다.That is, "expr3" serves as a flag by having a value of "1" if the result of the inw () function is abnormal and a value of "0" if it is normal.
도 4를 참조하면, USB_ASSERT_INW() 매크로 함수를 사용한 예시코드가 나타나 있다.Referring to FIG. 4, example code using the USB_ASSERT_INW () macro function is shown.
먼저 플래그값인 "P_flag"가 "0"으로 초기화되고(S410), 이후 USB_ASSERT_INW() 매크로 함수가 호출된다. USB_ASSERT_INW() 매크로 함수의 3개의 인자값으로는 "status", "io_addr + USBSTS", "P_flag"가 순서대로 전달된다.First, the flag value "P_flag" is initialized to "0" (S410), and then the USB_ASSERT_INW () macro function is called. The three argument values of the USB_ASSERT_INW () macro function are passed in order of "status", "io_addr + USBSTS", and "P_flag".
"status"는 첫번째 인자값으로 INW() 함수의 결과가 반영되는 변수이다. 따라서, 세번째 인자값인 "P_flag"는 INW() 함수의 결과에 따라, 즉 "status"값에 따라 "0"(정상)과 "1"(비정상)로 마크된다. "status" is the first parameter and the variable reflects the result of the INW () function. Therefore, the third argument value "P_flag" is marked as "0" (normal) and "1" (abnormal) depending on the result of the INW () function, that is, the "status" value.
따라서 "P_flag" 변수의 값에 의해 내부적으로 panic() 함수를 호출할 것인지가 결정된다. 다시 말해서, "P_flag"가 "1"인 경우에는 panic() 함수가 호출된 다.Therefore, the value of the "P_flag" variable determines whether to call the panic () function internally. In other words, when "P_flag" is "1", the panic () function is called.
도 7은 본 발명의 일 실시예에 따른, USB 디바이스 드라이버의 커널 하드닝을 수행하는 장치를 나타내는 도면이다.7 is a diagram illustrating an apparatus for performing kernel hardening of a USB device driver according to one embodiment of the present invention.
도 7을 참조하면, 리눅스 운영체제(740) 기반의 시스템에서 USB 디바이스 드라이버의 커널 하드닝을 수행하는 장치의 일 실시예는 USB 디바이스(710)의 연결을 인식하여 동적으로 USB 디바이스 드라이버 모듈을 시스템 커널로 로딩하는 I/O 인터페이스부(720) 및 로딩된 모듈에 구비된 커널 하드닝(kernel hardening) 함수를 이용하여 시스템 커널의 오류에 대한 커널 하드닝을 수행하는 커널 하드닝부(730)를 포함한다.Referring to FIG. 7, an embodiment of an apparatus for performing kernel hardening of a USB device driver in a
이상 살펴본 커널 하드닝 방법 및 장치의 여러 실시예에 따른 본 발명은 리눅스 운영체제에 USB 디바이스 장치를 연결하였을 때 패닉이 발생할 경우에 대해서 커널 하드닝 기법을 설계 및 구현한 발명이다. According to various embodiments of the above-described kernel hardening method and apparatus, a kernel hardening scheme is designed and implemented when a panic occurs when a USB device device is connected to a Linux operating system.
상기 본 발명의 여러 실시예에 따르면, 커널 하드닝 기술과 리눅스 운영체제의 DLM 기술을 USB 디바이스 장치에 적용하여 정상적으로 동작함을 알 수 있다. 이로 인하여 USB 디바이스 장치를 사용하는 시스템의 안정성이 높아지는 이점이 있다. 또한, 커널 하드닝 모듈을 시스템 동작중에 임의로 탈부착이 가능하도록 구현할 수 있는 이점이 있다.According to various embodiments of the present invention, it can be seen that the kernel hardening technology and the DLM technology of the Linux operating system are normally applied to the USB device device. This has the advantage of increasing the stability of systems using USB device devices. In addition, there is an advantage that the kernel hardening module can be implemented to be detachably attached during system operation.
한편, 상술한 본 발명의 커널 하드닝 방법은 컴퓨터에서 실행될 수 있는 프로그램으로 작성가능하고, 컴퓨터로 읽을 수 있는 기록매체를 이용하여 상기 프로그램을 동작시키는 범용 디지털 컴퓨터에서 구현될 수 있다. On the other hand, the above-described kernel hardening method of the present invention can be written as a program that can be executed in a computer, it can be implemented in a general-purpose digital computer to operate the program using a computer-readable recording medium.
또한, 상술한 바와 같이 본 발명에서 사용된 데이터의 구조는 컴퓨터로 읽을 수 있는 기록매체에 여러 수단을 통하여 기록될 수 있다. In addition, as described above, the structure of the data used in the present invention may be recorded on a computer-readable recording medium through various means.
상기 컴퓨터로 읽을 수 있는 기록매체는 마그네틱 저장매체(예를 들면, 롬, 플로피 디스크, 하드디스크 등), 광학적 판독 매체(예를 들면, 시디롬, 디브이디 등)와 같은 저장매체를 포함한다. The computer-readable recording medium may include a storage medium such as a magnetic storage medium (eg, a ROM, a floppy disk, a hard disk, etc.) and an optical reading medium (eg, a CD-ROM, a DVD, etc.).
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.So far I looked at the center of the preferred embodiment for the present invention. Those skilled in the art will appreciate that the present invention can be implemented in a modified form without departing from the essential features of the present invention. Therefore, the disclosed embodiments should be considered in an illustrative rather than a restrictive sense. The scope of the present invention is shown in the claims rather than the foregoing description, and all differences within the scope will be construed as being included in the present invention.
도 1은 본 발명의 일 실시예에 따른, USB 드라이버의 usb-uhci.c 소스 코드에 패닉(panic)이 발생할 수 있는 상황에서 이를 복구할 수 있는 USB_ASSERT() 매크로 함수의 소스 코드를 나타낸 도면이다.FIG. 1 is a diagram illustrating a source code of a USB_ASSERT () macro function that can recover a situation in which a panic may occur in a usb-uhci.c source code of a USB driver according to an embodiment of the present invention. .
도 2는 본 발명의 다른 실시예에 따른, usb-uhci-deu.c 파일에 추가한 USB_ASSERT() 매크로가 정상적으로 동작하는지를 테스트하기 위하여 USB 디바이스에 관한 uhci_interrupt() 함수에서 USB_ASSERT() 매크로 함수를 구현한 예를 나타내는 소스코드이다.Figure 2 implements the USB_ASSERT () macro function in the uhci_interrupt () function for the USB device to test whether the USB_ASSERT () macro added to the usb-uhci-deu.c file operates according to another embodiment of the present invention Source code showing an example.
도 3은 본 발명의 또 다른 실시예에 따른, USB_ASSERT() 매크로 함수를 이용하여 usb-uhci-deu.c 파일에 inw() 함수의 오류를 방지하는 USB_ASSERT_INW() 매크로 함수를 나타내는 소스코드이다.FIG. 3 is a source code illustrating a USB_ASSERT_INW () macro function that prevents an error of an inw () function in a usb-uhci-deu.c file by using a USB_ASSERT () macro function according to another embodiment of the present invention.
도 4는 본 발명의 또 다른 실시예에 따른, USB_ASSERT_INW() 매크로 함수를 사용한 예시코드를 나타내는 도면이다.4 is a diagram illustrating example code using a USB_ASSERT_INW () macro function according to another embodiment of the present invention.
도 5는 본 발명의 일 실시예에 따른, USB 디바이스 드라이버의 커널 하드닝을 수행하는 방법을 설명하기 위한 플로우 차트이다.5 is a flowchart illustrating a method of performing kernel hardening of a USB device driver according to an embodiment of the present invention.
도 6은 본 발명의 다른 실시예에 따른, USB 디바이스 드라이버의 커널 하드닝을 수행하는 방법을 설명하기 위한 플로우 차트이다.6 is a flowchart illustrating a method of performing kernel hardening of a USB device driver according to another exemplary embodiment of the present invention.
도 7은 본 발명의 일 실시예에 따른, USB 디바이스 드라이버의 커널 하드닝을 수행하는 장치를 나타내는 도면이다.7 is a diagram illustrating an apparatus for performing kernel hardening of a USB device driver according to one embodiment of the present invention.
상기 몇 개의 도면에 있어서 대응하는 도면 번호는 대응하는 부분을 가리킨 다. 도면이 본 발명의 실시예들을 나타내고 있지만, 도면이 축척에 따라 도시된 것은 아니며 본 발명을 보다 잘 나타내고 설명하기 위해 어떤 특징부는 과장되어 있을 수 있다. Corresponding reference numerals in the several drawings indicate corresponding parts. Although the drawings show embodiments of the invention, the drawings are not to scale and certain features may be exaggerated to better illustrate and explain the invention.
Claims (10)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020090083200A KR101064650B1 (en) | 2009-09-03 | 2009-09-03 | Method for kernel hardening of USB device driver in Linux operating system and apparatus thereof |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020090083200A KR101064650B1 (en) | 2009-09-03 | 2009-09-03 | Method for kernel hardening of USB device driver in Linux operating system and apparatus thereof |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20110024987A true KR20110024987A (en) | 2011-03-09 |
KR101064650B1 KR101064650B1 (en) | 2011-09-15 |
Family
ID=43932734
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020090083200A KR101064650B1 (en) | 2009-09-03 | 2009-09-03 | Method for kernel hardening of USB device driver in Linux operating system and apparatus thereof |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR101064650B1 (en) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100339051B1 (en) * | 1999-09-06 | 2002-05-31 | 이호동 | Auto-recovery system of LINUX using a flash card |
KR100779213B1 (en) | 2005-12-08 | 2007-11-26 | 한국전자통신연구원 | Method and apparatus for managing usb device for linux desktop |
KR100853941B1 (en) * | 2006-12-27 | 2008-08-25 | (주)아이디스 | Multimedia storage device and data recovering method of the device |
-
2009
- 2009-09-03 KR KR1020090083200A patent/KR101064650B1/en active IP Right Grant
Also Published As
Publication number | Publication date |
---|---|
KR101064650B1 (en) | 2011-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9558016B2 (en) | Platform system, method for changing support hardware configuration of universal extensible firmware interface basic input output system and computer program product | |
US8255594B2 (en) | Handling legacy BIOS services for mass storage devices using systems management interrupts with or without waiting for data transferred to mass storage devices | |
US9563439B2 (en) | Caching unified extensible firmware interface (UEFI) and/or other firmware instructions in a non-volatile memory of an information handling system (IHS) | |
KR101249693B1 (en) | Selecting subroutine return mechanisms | |
JP6017706B2 (en) | Mechanisms that support reliability, availability, and maintainability (RAS) flows in peer monitors | |
CN104704478A (en) | Recovery after input/ouput error-containment events | |
US10776193B1 (en) | Identifying an remediating correctable hardware errors | |
US10402204B1 (en) | Multi-platform firmware support | |
US10514972B2 (en) | Embedding forensic and triage data in memory dumps | |
JP2002312340A (en) | Allocation releasing method of plural processor cores for l2 correctable error | |
US8145819B2 (en) | Method and system for stealing interrupt vectors | |
US20160292108A1 (en) | Information processing device, control program for information processing device, and control method for information processing device | |
JP2005149501A (en) | System and method for testing memory with expansion card using dma | |
CN108009039B (en) | Terminal information recording method, device, storage medium and electronic equipment | |
KR101064650B1 (en) | Method for kernel hardening of USB device driver in Linux operating system and apparatus thereof | |
US10838737B1 (en) | Restoration of memory content to restore machine state | |
US9442831B1 (en) | Automated testing of program code for processing a simple boot flag data structure | |
US20080244313A1 (en) | Overriding Daughterboard Slots Marked with Power Fault | |
JP5545133B2 (en) | Static analysis processing system, method, and program | |
US20100077383A1 (en) | Simulation method and storage medium for storing program | |
US11182316B2 (en) | Program interrupt code conversion | |
JP2005149503A (en) | System and method for testing memory using dma | |
KR102202633B1 (en) | Error handling Processor and Error handling Method using the same | |
CN111176735B (en) | Method for accelerating startup of electrocardiograph | |
JP6724673B2 (en) | Test support program, test support method, and test support device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20140905 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20150903 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20160901 Year of fee payment: 6 |
|
FPAY | Annual fee payment |
Payment date: 20170904 Year of fee payment: 7 |
|
FPAY | Annual fee payment |
Payment date: 20190827 Year of fee payment: 9 |