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 PDF

Info

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
Application number
KR1020090083200A
Other languages
Korean (ko)
Other versions
KR101064650B1 (en
Inventor
장승주
이무성
Original Assignee
학교법인 동의학원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 학교법인 동의학원 filed Critical 학교법인 동의학원
Priority to KR1020090083200A priority Critical patent/KR101064650B1/en
Publication of KR20110024987A publication Critical patent/KR20110024987A/en
Application granted granted Critical
Publication of KR101064650B1 publication Critical patent/KR101064650B1/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram 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

PURPOSE: A system and a device for performing kernel hardening of a usb device driver in a system based on a Linux operating system are provided to perform kernel hardening of the USB device by using a DLM(Dynamic Linking Module) in the Linux operating system. CONSTITUTION: A system loads USB(Universal Serial Bus) device driver module to a system kernel(510). The system performs kernel hardening about an error of a system kernel(520). If an error occurrence case is a value type, the system forcibly set a variable value which expresses an error based on a condition value of a normal state(530,540). If the error occurrence case is an address type, the system displays an error file name and an execution code line(550). The system generates a system panic(560).

Description

리눅스 운영체제 기반의 시스템에서 USB 디바이스 드라이버의 커널 하드닝을 수행하는 방법 및 그 장치{Method for kernel hardening of USB device driver in Linux operating system and apparatus thereof}Method and kernel hardening of USB device driver in Linux operating system and apparatus

본 발명은 리눅스 운영체제 기반의 시스템에서 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 step 520, kernel hardening of an error of the system kernel is performed using a kernel hardening function provided in the loaded module (520). Recovers the system if an error occurs with the data value necessary to execute the system kernel through the kernel hardening process, and recovers the system if an error occurs with the memory address. Generate panic. Looking at the operation process in more detail, by determining the type of the variable in which the error occurs (530), in the case of the value type (value type) case using the condition value of the normal state of the argument value input to the function The system recovers by forcing the argument value indicated (540), but if the determination result is an address type, the file name and executable code line in which the error occurred are displayed to the user (550), and a system panic is generated. 560.

이러한 커널 하드닝이 구현된 실제 프로그램 코드의 예시를 도 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 operation 640, the flag value is selectively set. That is, by determining whether the marked flag value is "0" or "1" (650), for example, when the flag value is "1", the panic () function may be called (660).

상기 동작 과정이 구현된 실제 프로그램 코드의 예시를 도 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 Linux operating system 740 based system recognizes a connection of a USB device 710 and dynamically converts a USB device driver module into a system kernel. The kernel hardening unit 730 performs kernel hardening on an error of the system kernel by using the kernel hardening function provided in the loaded module. .

이상 살펴본 커널 하드닝 방법 및 장치의 여러 실시예에 따른 본 발명은 리눅스 운영체제에 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)

리눅스 운영체제(OS: Operating System) 기반의 시스템에서 USB 디바이스 드라이버의 커널 하드닝을 수행하는 방법에 있어서,How to perform kernel hardening of USB device driver in Linux operating system based system, 상기 USB 디바이스의 연결을 인식하여 동적으로 USB 디바이스 드라이버 모듈을 시스템 커널로 로딩하는 단계; 및Recognizing a connection of the USB device and dynamically loading a USB device driver module into a system kernel; And 상기 로딩된 모듈에 구비된 시스템 커널의 오류에 대한 커널 하드닝(kernel hardening) 함수를 이용하여 커널 하드닝을 수행하는 단계를 포함하는 것을 특징으로 하는 방법.And performing kernel hardening by using a kernel hardening function on an error of a system kernel included in the loaded module. 제1항에 있어서, 상기 커널 하드닝을 수행하는 단계는The method of claim 1, wherein performing kernel hardening 상기 시스템 커널을 수행하는데 필요한 데이터값(data value)에 대하여 오류가 발생한 경우에는 시스템을 복구하고, 메모리 주소값(memory address)에 대하여 오류가 발생한 경우에는 시스템에 대하여 패닉(panic)을 발생시키는 것을 특징으로 하는 방법.Recovering the system when an error occurs with respect to a data value required to execute the system kernel, and generating a panic for the system when an error occurs with a memory address. How to feature. 제2항에 있어서, 상기 커널 하드닝을 수행하는 단계는3. The method of claim 2, wherein performing kernel hardening 복수개의 인자값을 입력받는 단계;Receiving a plurality of factor values; 상기 입력된 인자값을 이용하여 오류가 발생한 변수의 타입이 값 형태(value type) 또는 주소 형태(address type)인지를 판단하는 단계;Determining whether a type of a variable in which an error occurs is a value type or an address type using the input argument value; 상기 판단 결과, 값 형태(value type)인 경우에 상기 입력된 인자값 중 정상상태의 조건값을 이용하여 시스템을 복구하는 단계; 및Restoring the system using a condition value of a steady state among the inputted factor values in the case of a value type; And 상기 판단 결과, 주소 형태(address type)인 경우에 오류가 발생한 파일명 및 실행 코드 라인을 사용자에게 표시하는 단계를 더 포함하는 것을 특징으로 하는 방법.And displaying a file name and an executable code line in which an error occurs in the case of an address type as a result of the determination. 제3항에 있어서,The method of claim 3, 상기 복수개의 인자값은 시스템 커널의 오류를 나타내는 변수값인 제1 인자값, 정상상태의 조건값인 제2 인자값, 변수의 타입을 구분하는 제3 인자값을 포함하며,The plurality of parameter values include a first parameter value, which is a variable value representing an error of a system kernel, a second parameter value, which is a steady state condition value, and a third parameter value, which distinguishes a type of a variable. 상기 제3 인자값을 판단한 결과, 변수의 타입이 값 형태(value type)인 경우에 상기 제2 인자값을 상기 제1 인자값의 변수에 할당하는 단계를 더 포함하는 것을 특징으로 하는 방법.And as a result of determining the third factor value, assigning the second factor value to the variable of the first factor value when the type of the variable is a value type. 제1항에 있어서, 상기 커널 하드닝을 수행하는 단계는The method of claim 1, wherein performing kernel hardening 복수개의 인자값을 입력받는 단계;Receiving a plurality of factor values; 상기 입력된 인자값을 이용하여 상기 리눅스 운영체제의 시스템 호출 함수를 통해 상기 USB 디바이스를 판독하는 단계; 및Reading the USB device through a system call function of the Linux operating system using the input argument value; And 상기 판독된 시스템 호출 함수의 결과값에 따라 상기 인자값 중 플래그값을 선택적으로 설정하는 단계를 포함하는 것을 특징으로 하는 방법.Selectively setting a flag value among the argument values according to a result value of the read system call function. 제5항에 있어서,The method of claim 5, 상기 복수개의 인자값은 시스템 커널의 오류를 확인하고자 하는 변수값인 제4 인자값, 상기 시스템 호출 함수의 전달 인자값인 제5 인자값, 오류 발생 여부를 나타내는 플래그값인 제6 인자값을 포함하며,The plurality of argument values include a fourth argument value which is a variable value for checking an error of a system kernel, a fifth argument value that is a transfer argument value of the system call function, and a sixth argument value that is a flag value indicating whether an error occurs. , 상기 제5 인자값을 전달받은 상기 시스템 호출 함수의 결과값을 상기 제4 인자값의 변수에 할당하는 단계; 및Assigning a result value of the system call function receiving the fifth argument value to a variable of the fourth argument value; And 상기 제4 인자값이 정상 또는 비정상인지에 따라 상기 제6 인자값에 0 또는 1의 값을 할당하는 단계를 더 포함하는 것을 특징으로 하는 방법.And assigning a value of 0 or 1 to the sixth factor value according to whether the fourth factor value is normal or abnormal. 제6항에 있어서,The method of claim 6, 상기 플래그값인 제6 인자값에 따라, 패닉(panic) 함수를 선택적으로 호출하는 단계를 더 포함하는 것을 특징으로 하는 방법.Selectively calling a panic function according to the sixth argument value that is the flag value. 리눅스 운영체제 기반의 시스템에서 USB 디바이스 드라이버의 커널 하드닝을 수행하는 장치에 있어서,In a device that performs kernel hardening of a USB device driver in a Linux operating system-based system, 상기 USB 디바이스의 연결을 인식하여 동적으로 USB 디바이스 드라이버 모듈을 시스템 커널로 로딩하는 I/O 인터페이스부; 및An I / O interface unit recognizing a connection of the USB device and dynamically loading a USB device driver module into a system kernel; And 상기 로딩된 모듈에 구비된 시스템 커널의 오류에 대한 커널 하드닝(kernel hardening) 함수를 이용하여 커널 하드닝을 수행하는 커널 하드닝부를 포함하는 것 을 특징으로 하는 장치. And a kernel hardening unit configured to perform kernel hardening by using a kernel hardening function on an error of a system kernel included in the loaded module. 제8항에 있어서, 상기 커널 하드닝부는The method of claim 8, wherein the kernel hardening unit 상기 시스템 커널을 수행하는데 필요한 데이터값(data value)에 대하여 오류가 발생한 경우에는 시스템을 복구하고, 메모리 주소값(memory address)에 대하여 오류가 발생한 경우에는 시스템에 대하여 패닉(panic)을 발생시키는 것을 특징으로 하는 장치.Recovering the system when an error occurs with respect to a data value required to execute the system kernel, and generating a panic for the system when an error occurs with a memory address. Characterized in that the device. 리눅스 운영체제 기반의 시스템에서 USB 디바이스 드라이버의 커널 하드닝을 수행하는 방법을 컴퓨터상에서 실행시키기 위한 프로그램이 기록된 기록 매체에 있어서,In a recording medium having a program recorded thereon for executing on a computer a method of performing kernel hardening of a USB device driver in a Linux operating system-based system, 상기 USB 디바이스의 연결을 인식하여 동적으로 USB 디바이스 드라이버 모듈을 시스템 커널로 로딩하는 단계; 및Recognizing a connection of the USB device and dynamically loading a USB device driver module into a system kernel; And 상기 로딩된 모듈에 구비된 시스템 커널의 오류에 대한 커널 하드닝(kernel hardening) 함수를 이용하여 커널 하드닝을 수행하는 단계를 수행하는 것을 특징으로 하는 컴퓨터로 판독 가능한 기록 매체.And performing kernel hardening by using a kernel hardening function for an error of a system kernel included in the loaded module.
KR1020090083200A 2009-09-03 2009-09-03 Method for kernel hardening of USB device driver in Linux operating system and apparatus thereof KR101064650B1 (en)

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)

* Cited by examiner, † Cited by third party
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

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