KR20020033859A - Linux security kernel - Google Patents
Linux security kernel Download PDFInfo
- Publication number
- KR20020033859A KR20020033859A KR1020000064017A KR20000064017A KR20020033859A KR 20020033859 A KR20020033859 A KR 20020033859A KR 1020000064017 A KR1020000064017 A KR 1020000064017A KR 20000064017 A KR20000064017 A KR 20000064017A KR 20020033859 A KR20020033859 A KR 20020033859A
- Authority
- KR
- South Korea
- Prior art keywords
- kernel
- file
- access
- security
- module
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/31—User authentication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Databases & Information Systems (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Debugging And Monitoring (AREA)
Abstract
Description
본 발명은 리눅스의 보안커널에 관한 것으로, 리눅스 커널은 버전을 거듭할수록 크기가 증가하는 추세이므로 커널 함수들의 지속적인 발전과 확장뿐 아니라 새로운 장치 드라이버의 증가 덕분으로 리눅스가 비록 단일 시스템이기는 하지만 모든 장치 드라이버와 사용되는 파일 시스템은 커널에서 영속적으로 결합된다. 이는 우선 환경이 변할 때 커널은 재 컴파일 되어야 하고 다른 한편으로는 드라이버와 파일 시스템이 거의 사용되지 않더라도 메모리에서 지속적인 공간을 확보해야 한다는 뜻이다. 다른 불이익은 새로운 커널 코드는 개발자에게 직접적으로 느끼게 해 줄 것이고, 사소한 수정이 있더라도 새로운 커널이 생성되고 인스톨되면서 컴퓨터를 재부팅 시켜야만 한다.The present invention relates to a secure kernel of Linux. Since the Linux kernel has been increasing in size from time to time, all device drivers, even though Linux is a single system, are supported by the continuous development and expansion of kernel functions as well as the increase of new device drivers. The file system used with is permanently combined in the kernel. This means, first of all, that when the environment changes, the kernel needs to be recompiled, while on the other hand, it needs to have persistent space in memory even if the drivers and file systems are rarely used. Another disadvantage is that the new kernel code will make you feel directly to the developer, and even minor modifications will require you to reboot your computer as the new kernel is created and installed.
그러나 커널의 관점에서 모듈은 대개 많은 함수로 구성되고 실행 시간에 연결되어 제거 가능한 오브젝트 코드로 이루어져 있다. 이 오브젝트 코드는 시스템 모드에서 돌아가는 것과 똑 같은 권한으로 커널을 돌리는데 사용된다. 커널의 단일한 구조는 변하지 않고, 마이크로 커널과는 달리 새로 추가된 함수는 스스로는 실행되지 않는다. 모듈로서 장치 드라이버나 파일 시스템을 실행시키는 한가지 이점은 오직 문서화된 인터페이스만이 사용될 수 있고, 사용자를 위해서 모듈은 작고 간단한 커널이 필요할 때마다 추가되는 다른 함수들과 사용할 수 있게 된다. 따라서, 사용자가 신경쓸 필요없이 모듈을 자동으로 로드하는 것이 가능하다. C 파일은 다양한 종류의 기능 그룹으로 구성된 디렉토리로 조직되어 있다. 컴파일 중 기능적 소단위들은 오브젝트 파일로 모아져서 대개 커널이 로드될 때 모든 오브젝트 파일에 개별적으로 접근할 필요가 없다. 이 기능적 단위는 종종 모듈로 사용된다.However, from the kernel's point of view, a module is usually made up of many functions and object code that is linked at runtime and removed. This object code is used to run the kernel with the same privileges as running in system mode. The single structure of the kernel does not change, and unlike the microkernel, newly added functions do not execute on their own. One advantage of running a device driver or file system as a module is that only a documented interface can be used, and for the user the module can be used with other functions added whenever a small, simple kernel is needed. Thus, it is possible to load the module automatically without the user having to worry about it. C files are organized into directories made up of various kinds of functional groups. Functional subunits are compiled into object files during compilation so that you do not usually have to access every object file individually when the kernel is loaded. This functional unit is often used as a module.
리눅스 커널 모듈의 실행을 위해 리눅스 시스템은 세 가지 시스템 콜(create_module, init_module, delete_module)을 제공한다. 더 나은 시스템 콜은 커널 심볼 테이블의 복사본을 얻기 위해서 사용자 프로세스로서 사용된다. 리눅스에서 모듈의 감독은 로드된 모든 모듈을 포함하는 리스트를 사용하는 것이다. 이 리스트는 또한 모듈의 심볼 테이블과 레퍼런스를 감독한다. 커널에 관한 한, 모듈은 시스템 콜인 create_module과 init_module에 관련된 2가지 단계로 로드된다. 사용자 프로세스에서 이 과정은 4단계로 구분된다.The Linux system provides three system calls for creating Linux kernel modules: create_module, init_module, and delete_module. Better system calls are used as user processes to get a copy of the kernel symbol table. In Linux, the oversight of modules is to use a list containing all loaded modules. This list also oversees the module's symbol table and references. As far as the kernel is concerned, modules are loaded in two phases related to the system calls create_module and init_module. In the user process, this process is divided into four steps.
1단계, 프로세스는 오브젝트 파일의 내용을 자신의 주소 공간에 넣는다. 정상적인 오브젝트 파일에서 코드와 데이터들은 로드된 후, 주소 0에서 시작한 것처럼 정렬된다. 코드와 데이터를 실제 수행되는 방식으로 폼에 넣기 위해선 실제적인 로드 주소는 다양한 관점에서 추가된다. 이 프로세스는 할당(relocating)으로 알려져 있다. 요구된 부분으로의 참조는 오브젝트 파일에서 포함된다. 오브젝트 파일에서 해결되지 않은 레퍼런스가 있을 수 있다. 오브젝트 파일이 분석될 때 오브젝트 모듈의 크기는 또한 얻어진다.Step 1, the process puts the contents of the object file into its address space. In a normal object file, the code and data are loaded and sorted as if they started at address 0. To put code and data into a form in a way that is actually performed, the actual load address is added from various perspectives. This process is known as relocating. References to the requested part are included in the object file. There may be an unresolved reference in the object file. The size of the object module is also obtained when the object file is analyzed.
2단계, 시스템 콜 create_module은 먼저 오브젝트 모듈의 첫번째 주소를 얻기 위해서고 두번째로는 이에 대한 메모리를 준비하기 위해 사용된다. 이를 위해 구조 모듈은 모듈의 리스트에서 모듈로 들어가고 메모리는 배정된다. 반환 값은 모듈이 나중에 카피될 주소를 돌려준다.Step 2, the system call create_module is used first to get the object module's first address and secondly to prepare memory for it. To do this, the structural module enters the module from the list of modules and memory is allocated. The return value returns the address where the module will be copied later.
3단계, create_module에 의해서 건네진 로드 주소는 오브젝트 파일을 재할당시키는데 쓰인다. 이 프로시저는 오브젝트 파일에 따라 메모리 영역을 대신한다. 이 점에서 오브젝트 모듈은 정확한 주소에 있지 않고 커널 세그먼트 안의 모듈의 로드 주소에 재위치된다. 해결되지 않은 참조는 리눅스가 시스템 콜 get_kernel_syms()를제공함으로 커널 심볼을 사용하여 해결될 수 있다. 함수가 호출될 때 리눅스는 다른 두 경우 사이의 구별을 한다. 널 포인터가 매개변수로 건네질 때 커널 심볼 테이블의 사이즈를 알아내는 것을 가능하게 한다. 다른 매개변수가 사용되었다면 지시된 위치는 메모리에 심볼 테이블의 복사본을 제공한다. 이것은 우선 테이블의 사이즈를 결정하고 관계된 메모리의 용량을 요구하고 시스템 콜 get_kernel_syms()를 다시 사용하게 하는 프로세스를 가능케 한다. 주소를 제외하곤 테이블에 어떠한 종류의 타입정보도 없다. 그러므로 모듈을 개발하는 동안 정확한 헤더파일이 포함되었는지 확인하는데 주의해야 한다. 가장 유연해지기 위해 모듈은 스스로 심볼을 커널 심볼 테이블에 추가 시킬 수 있다. 이는 다른 모듈이 먼저 로드된 모듈로부터 함수를 사용할 수 있게 한다. 이 매커니즘을 모듈스테킹(module stacking)이라 한다. 모듈에서 나온 모든 테이블은 독립된 심볼 테이블로 수집된다.The load address passed in step 3, create_module, is used to reallocate the object file. This procedure replaces the memory area depending on the object file. At this point, the object module is not at the correct address, but is relocated to the load address of the module in the kernel segment. Unresolved references can be resolved using kernel symbols by providing the system call get_kernel_syms (). When a function is called, Linux makes a distinction between the other two cases. It makes it possible to find out the size of the kernel symbol table when a null pointer is passed as a parameter. If other parameters are used, the indicated location provides a copy of the symbol table in memory. This allows the process to first determine the size of the table, request the amount of memory involved and allow the system call get_kernel_syms () to be used again. There is no type information of any kind in the table except for the address. Therefore, care must be taken to ensure that the correct header file is included during module development. To be the most flexible, the module can add symbols to the kernel symbol table by itself. This allows other modules to use the function from the module loaded first. This mechanism is called module stacking. All tables from the module are collected as separate symbol tables.
4단계, 일단 예비적인 작업이 끝났다면 우리는 오브젝트 모듈을 로드할 수 있다. 이는 그 매개변수 중에서 구조체 mod_routines와 그 모듈의 심볼 테이블에 포인터를 주는 시스템 콜 init_module을 사용하게 한다. 모듈 감독 함수들은 mod_routine구조로 제시되고 리눅스는 오브젝트 모듈을 커널 주소 공간에 카피한다. 감독함수 init()는 코드와 데이터가 인스톨될 때 단 한번 불러지고 적절한 레지스터 함수도 또한 불러져야 한다. 반환 값은 인스톨 프로시저가 성공적인지를 판단한다. 두번째 감독함수 cleanup()은 모듈이 해제될 때 불러지고 적절한 레지스터 함수가 초기화된다.Step 4, Once the preliminary work is done, we can load the object module. This allows you to use the system call init_module, which gives a pointer to the structure mod_routines and the module's symbol table. Module supervision functions are presented in a mod_routine structure, and Linux copies object modules into the kernel address space. The supervised function init () must be called only once when code and data is installed, and the appropriate register function must also be called. The return value determines whether the installation procedure is successful. The second supervisor cleanup () is called when the module is released and the appropriate register function is initialized.
커널에서의 심볼 테이블은 파일 kernel/ksyms.c 에서 정의된다. 각 추출된 함수는 symbol_테이블에 엔트리를 가지고 있다. 각 경우의 함수와 변수의 이름은 macro X()에 의해 symbol_테이블로 변환된다. 모듈의 심볼 테이블은 추출된 심볼 뿐만 아니라 또한 모듈에 의해 사용된 커널에서의 심볼로의 참조도 보여준다. 이는 모듈의 상호종속성이 측정될 수 있게 해준다. 결국 다른 모듈에 의해 사용되고 있는 모듈은 해제되지 않을 것이다. 사용 후 모듈을 해제할 때 발생하는 문제를 피하는데 추가적인 도움은 USE_COUNT 매커니즘이다. 예를 들어 우리가 장치 드라이버를 모듈로서 실행했고 로드되었다면 사용 카운터는 모듈이 열릴 때마다 증가하고 닫힐 때마다 감소할 것이다. 이는 모듈을 해제할 때 그것이 아직도 사용 중인지 확인할 수 있다는 것을 의미한다. 사용 계수가 면하는 위치는 때때로 찾기 어렵거나 불가능할 때도 있다는 것을 언급해야 한다.The symbol table in the kernel is defined in the file kernel / ksyms.c. Each extracted function has an entry in the symbol_ table. The names of the functions and variables in each case are converted to the symbol_table by macro X (). The symbol table of the module shows not only the extracted symbols but also references to the symbols in the kernel used by the module. This allows the interdependencies of the modules to be measured. Eventually the module being used by another module will not be released. An additional help to avoid problems when releasing a module after use is the USE_COUNT mechanism. For example, if we run the device driver as a module and load it, the usage counter will increment each time the module is opened and decrement each time it is closed. This means that when you release the module, you can see if it is still in use. It should be noted that the location where the coefficient of use is absent is sometimes difficult or impossible to find.
특히 다른 경우의 최후 수단으로서 init() 함수가 수행되는 동안 사용 계수를 전용 오퍼레이션으로 증가시키는 것도 가능하다. 이는 모듈은 결코 제거될 수 없다는 것을 의미한다. 모듈의 유연성은 그들이 동적으로 로드될 수 있다는 사실에 달려 있지 않다. 시스템 콜 delete_module을 사용함으로써 로드된 모듈은 다시 제거될 수 있다. 두 가지 전제는 여기서 언급할 필요가 있다. 모듈로의 참조는 없어야 하고 모듈의 사용계수는 0값을 가져야 한다. 모듈이 끝나기 전에 인스톨되는 동안 등록된 cleanup() 함수가 호출된다. 이 함수에서 실행동안 요청된 동적인 자원은 init()함수에서 해제될 수 있다.In particular, as a last resort in other cases, it is also possible to increase the usage factor to a dedicated operation while the init () function is running. This means that the module can never be removed. The flexibility of modules does not depend on the fact that they can be loaded dynamically. The loaded module can be removed again by using the system call delete_module. Two premises need to be mentioned here. There should be no reference to the module and the coefficient of use of the module must have a value of zero. The registered cleanup () function is called during installation before the module finishes. Dynamic resources requested during execution in this function can be freed in the init () function.
모듈이 시작했을 때 모듈이 정상적으론 ISA버스의 하드웨어 자원을 자동적으로 인식하지 못하기 때문에 때때로 I/O주소나 ISA장치에 사용되는 인터럽트 같은 매개 변수를 건네줄 필요가 있다. 그러므로 모듈은 숫자나 문자열 매개 변수로 넘겨질 수 있다. 모듈 내부에는 매개 변수 이름을 가지고 있는 int, int[],char *형태의 변수들이 정의되어 있다. 모듈이 로딩되는 동안 변수는 지정된 숫자의 매개 변수로 초기화된다. 문자열 매개 변수가 먼저 배정되고 다음 표와 같이 포인터가 조정된다.When the module starts up, the module normally does not automatically recognize the hardware resources of the ISA bus, so it is sometimes necessary to pass parameters such as I / O addresses or interrupts used by the ISA device. Thus modules can be passed as numeric or string parameters. Inside the module, variables of type int, int [], and char * are defined with parameter names. While the module is loading, the variable is initialized with the specified number of parameters. String parameters are assigned first and pointers are adjusted as shown in the following table.
insmod 모듈 io=0x300.0x308 name = “test”로의 호출은 io배열을 0x300과 0x308로 이름 포인터를 건네진 문자열로 초기화시킨다.The call to the insmod module io = 0x300.0x308 name = “test” initializes the io array with the string passed the name pointer at 0x300 and 0x308.
리눅스 커널 버전 2.0의 장점 중에 하나는 커널 데몬이다. 이는 모듈의 로딩과 제거를 시스템 사용자가 알아차리지 못하게 자동으로 수행하는 프로세스를 말한다. 리눅스 커널과 커널 데몬 사이의 교류는 IPC를 통해서 수행된다. 커널 데몬은 플래그(flag)의 IPC_KERNELD로 메시지 큐를 연다. 이 큐는 자동으로 커널 데몬을 위한 메시지 큐로 커널에 의해 사용된다. 이러한 제안을 위해 존재하는 IPC의 실행은 커널 데몬에 메시지를 보내는 함수 int kerneld_send(int msgtype, int return_size, int msgsz, const char *text, const char *return_value); 에 의해서 확장되며, 다음 표와 같은 구조로 전송된다.One of the advantages of the Linux kernel version 2.0 is the kernel daemon. This is the process of automatically loading and removing modules from the system user. The exchange between the Linux kernel and the kernel daemon is done through IPC. The kernel daemon opens a message queue with the flag IPC_KERNELD. This queue is automatically used by the kernel as the message queue for kernel daemons. The existing IPC implementation for this suggestion is the function int kerneld_send (int msgtype, int return_size, int msgsz, const char * text, const char * return_value); Expanded by, and transmitted in the structure shown in the following table.
mtype 요소는 메시지를 담고 있고 id는 커널이 대답을 요구하는 지를 표시한다. id가 0이 아니라면 요구된 오퍼레이션의 종료 후에 커널 데몬은 mtype으로 id의 내용을 메시지로 보내고 새로운 id값으로 실행된 명령의 결과 값을 건네준다. pid 요소는 커널 요구를 일으키는 프로세스의 PID를 가진다. 커널 데몬은 환경변수의 KERNELD_TRIGGER로 시작하는 모든 프로그램에 모듈을 로드하고 해제하는 권한은 함수에 있다.The mtype element contains the message and the id indicates whether the kernel requires an answer. If id is nonzero, after completion of the requested operation, the kernel daemon sends a message with the type of id to mtype and passes the result of the command executed with the new id value. The pid element contains the PID of the process causing the kernel request. The kernel daemon is responsible for loading and unloading modules into all programs starting with KERNELD_TRIGGER in the environment variable.
커널은 request_module()로 모듈의 로딩을 요청하고 오퍼레이션이 수행될 때까지 기다린다. release_module()함수는 오퍼레이션의 종료가 기다려져야 하는지 지정하는 wait_flag로 모듈을 해제한다. delayed_release_module() 함수는 모듈이 지정한 대로 지연된 후 제거되게 한다. 이 함수는 오퍼레이션이 cancel_release_module()에 의해 제거되지 않았다면 60초 후에 자동으로 모듈을 제거하게 지시한다. 가령 예를 들어 파일 시스템 타입은 데이터 자원이 장착될 때를 발견할 수 없다면 커널이 다음 코드를 실행한다.The kernel requests a module load with request_module () and waits for the operation to be performed. The release_module () function releases the module with wait_flag which specifies whether the end of the operation should wait. The delayed_release_module () function causes the module to be removed after being delayed as specified. This function instructs the module to be automatically removed after 60 seconds if the operation was not removed by cancel_release_module (). For example, if the file system type cannot be found when a data resource is loaded, the kernel executes the following code:
이런 방식으로 알려지지 않은 파일 시스템은 모듈 이름이 파일 시스템 이름으로 확인될 때 언제나 로드된다. 장치 관리자에겐 일반적인 요청은 다음의 char-major-major이나 block-major-major패턴으로 생성된다. 커널 데몬은 모듈을 로딩하고 해제하는 요청을 modprobe-k로의 호출로 변환한다. 이 시스템 프로그램은 모듈의 이름에 일반적인 요청에서 로드되도록 할당할 수 있다. 그것은 리눅스 커널에서 사용되는 모든 커널 이름을 가지고 있다. 그래서 단지 새로운 모듈만이 파일 /etc/modules.conf나 /etc/conf.modules에 엔트리로 등록된다.File systems that are not known in this way are always loaded when the module name resolves to the file system name. For device managers, a general request is made with the following char-major-major or block-major-major pattern: The kernel daemon translates requests to load and unload modules into calls to modprobe-k. This system program can assign a module name to be loaded in a normal request. It has all the kernel names used in the Linux kernel. So only new modules are registered as entries in the file /etc/modules.conf or /etc/conf.modules.
따라서, 본 발명은 리눅스 보안커널 모듈을 구현하는 것을 목적으로 한다.Accordingly, the present invention aims to implement a Linux security kernel module.
리눅스 보안커널의 설계 목표는 관리의 어려움과 성능저하를 최소화하고 보안수준을 극대화하는 데 있다. 그리고 실제 리눅스 보안커널은 운영체제 수준에서 구현되고, 운영체제의 가상부분으로서 운영된다. 또한 이를 위해서 기존 운영체제 커널 코드를 새로 작성하거나 운영체제 커널을 새로 생성하지 않는다는 전제 조건 하에 개발되었다.The design goal of the Linux security kernel is to minimize administrative difficulties, performance degradation, and maximize security. The actual Linux security kernel is implemented at the operating system level and runs as a virtual part of the operating system. In addition, it was developed under the precondition that new operating system kernel code or new operating system kernel is not created for this purpose.
리눅스 보안커널의 기능은 다음 표와 같다.The Linux security kernel features are shown in the following table.
도 2는 본 발명의 시스템에서 리눅스 보안커널의 위치 상호 연관을 나타내고 있다.Figure 2 illustrates the location correlation of the Linux security kernel in the system of the present invention.
도 1과 같이 운영체제 커널에는 시스템호출에 대한 메모리 주소 포인터를 가지고 있는 시스템 벡터 테이블(system vector table)이 있다. 메모리 주소 포인터는 시스템 호출의 실제 커널 코드가 존재하는 메모리상의 위치를 가리킨다. 리눅스 보안커널 모듈(16)은 보안과 관련된 시스템 호출의 메모리 주소 포인터를 다른 곳에 저장한 후, 커널상에서 보안과 관련된 일을 수행할 별도의 시스템 호출의 메모리 주소를 대체한다.As shown in FIG. 1, the operating system kernel has a system vector table having a memory address pointer for a system call. The memory address pointer points to the location in memory where the actual kernel code of the system call resides. The Linux security kernel module 16 stores the memory address pointer of the security related system call elsewhere, and then replaces the memory address of the separate system call to perform security related work on the kernel.
따라서 사용자 프로세스(11)가 보안과 관련된 시스템 호출을 수행하게 되면, 리눅스 보안커널 모듈(16)은 원래의 해당 시스템 호출을 수행하는 것이 아니라 별도의 시스템 호출을 수행하게 되며, 별도의 시스템 호출은 보안정책 데이터베이스를 읽어 보안설정 사항에 위반되는가를 검사한다. 위반사항이 없을 경우에는 원래의 시스템 호출로 수행 흐름을 돌려주고, 위반사항이 있을 경우에는 곧바로 사용자에게 에러를 돌려준다.Therefore, when the user process 11 performs a system call related to security, the Linux security kernel module 16 performs a separate system call instead of an original corresponding system call, and the separate system call is secured. Read the policy database to check whether it violates security settings. If there is no violation, the execution flow is returned to the original system call, and if there is a violation, an error is immediately returned to the user.
도 1은 리눅스 보안 커널 개념도1 is a Linux secure kernel conceptual diagram
도 2는 보안커널과 보안관리시스템 흐름도2 is a flow diagram of a security kernel and security management system
도 3는 커널 모듈 수행 과정3 is a kernel module execution process
도 4는 로긴 제어 기능 수행 과정4 is a process of performing a login control function
도 5는 파일 및 자원 접근 제어 기능 수행 과정5 is a process of performing a file and resource access control function
도 6은 특정 명령어 및 프로세스 수행 제어 기능 수행 과정6 is a process of performing a specific command and process execution control function
이하, 본 발명의 실시 예를 첨부된 도면을 참고하여 상세히 설명하면 다음과 같다.Hereinafter, exemplary embodiments of the present invention will be described in detail with reference to the accompanying drawings.
도 3은 보안커널 모듈 수행과정 이다. 드라이버 초기화 시에 입력된 파라미터를 통해 최대 사용자수와 동일한 사용자에 대한 접속을 제한할 지를 결정하고, 수정한 system call로 system call table을 변경한다. 그리고 각 설정 파일들의 내용을 읽어들이고 버퍼에 저장한다. 설정 파일의 내용이 변경되었는지를 확인하기 위해 각각의 inode 번호를 읽어들인다.3 is a process of executing a security kernel module. It decides whether to limit access to the same users as the maximum number of users through parameters input at the driver initialization and change the system call table with the modified system call. It reads the contents of each configuration file and stores it in a buffer. Each inode number is read to see if the contents of the configuration file have changed.
정책구성파일은 /etc/nsl/chklogin, /etc/nsl/chkopen, /etc/nsl/chkexec로 구성되며, 로그파일은 /var/log/nsl/login.log, var/log/nsl/open.log, var/log/nsl/exec.log, var/log/nsl/root.log로 구성된다.The policy configuration file consists of / etc / nsl / chklogin, / etc / nsl / chkopen, / etc / nsl / chkexec, and the log files are /var/log/nsl/login.log, var / log / nsl / open. It consists of log, var / log / nsl / exec.log and var / log / nsl / root.log.
모듈 실행 방법은 각 정책 구성 파일을 생성한 후 내용을 입력한다. insmod 명령으로 모듈을 load한다.(insmod call.o umax=최대사용자수 identity=[y | n]) rmmod 명령으로 모듈 unload 한다.(rmmod call)Module execution method creates each policy configuration file and inputs the contents. Load module with insmod command (insmod call.o umax = maximum number of users identity = [y | n]) Unload module with rmmod command (rmmod call)
도 4는 로긴 제어 기능 수행 과정이다. 기존의 login(A11) 프로그램의 소스를 수정하여 ioctl()을 통하여 보안커널모듈(A13)로 정보를 전달한다. 첫 번째 ioctl() 호출은 사용자명을 보안커널모듈(A13)로 전달한다. 두 번째 ioctl()은 해당 사용자(A10)에 대한 접속 허용여부를 확인한다. 모듈(A13) 초기화 시에 읽어들인 구성 파일(etc/chklogin)의 사용자 필드와 현재 접속하려는 사용자(A10)의 ID를 비교하여, 만약 접속을 제한하려는 사용자(A10)와 동일하면 접속을 제한하는 시간대에 속하는지 확인하고, 제한시간에 포함된 경우는 해당 사용자의 login(A11)을 차단한다. 또한 동시 최대 사용자의 수를 제한하기 위해서 utmp(A15)파일을 사용한다. 이 파일은 시스템에서 제공되면 현재 접속한 사용자의 정보를 유지한다. 최대 접속자수가 넘어설 경우 이후의 접속을 차단한다. 동일한 사용자의 접속을 제한할 경우, utmp(A15)에서 사용자명 필드와 현재 접속하는 사용자의 ID를 비교하여 같은 사용자의 접속을 제한한다. 동시 최대 사용자수와 동일한 사용자의 접속 설정은 모듈(A13) load시 파라미터로 전달한다. 즉, 최대 사용자 수는 umax = xxx로, 동일한 사용자 접속 여부는 identity = y (예 : ismod call.o umax=300 identity=y)로 설정한다. 최대 접속자의 수는 300명으로 제한하고 동일한 사용자의 접속을 제한한다. 또한 로긴제어기능의 구성파일은 /etc/nsl/chkopen 으로 구성되며, 파일형식은 다음표와 같다.4 is a process of performing a login control function. Modifies the source of the existing login (A11) program and passes the information to the security kernel module (A13) through ioctl (). The first ioctl () call passes the username to the secure kernel module (A13). The second ioctl () checks whether the user A10 is allowed to access. Compares the user field in the configuration file (etc / chklogin) read at module A13 initialization with the ID of the user A10 to which access is currently being made. If it belongs to the time limit, it blocks the user's login (A11). We also use the utmp (A15) file to limit the maximum number of concurrent users. This file maintains the information of the currently connected user when provided by the system. If the maximum number of users is exceeded, the subsequent connection is blocked. When restricting the access of the same user, utmp (A15) compares the user name field with the ID of the user currently connected to restrict access of the same user. Connection settings of users equal to the maximum number of simultaneous users are transmitted as parameters at module A13 load. That is, the maximum number of users is set as umax = xxx and whether the same user is connected is set as identity = y (eg ismod call.o umax = 300 identity = y). The maximum number of users is limited to 300 and the same user is restricted. Also, the configuration file of login control function is composed of / etc / nsl / chkopen and the file format is as the following table.
위 표의 구성파일형식을 설명하면, Username은 사용자의 ID, 각 필드는 ";"로 구분하고, 제한 시간은 시와 분으로 구성(24시)한다. (예 : user1;0070;2400; user1이라는 사용자를 오전 7시부터 자정까지 접속을 제한)In the above configuration file format, Username is the user's ID, each field is separated by ";", and the time limit is composed of hours and minutes (24 hours). (E.g. user1; 0070; 2400; restrict user1 access from 7 am to midnight)
도 5는 파일 및 자원 접근 제어 기능 수행 과정을 나타내는 것으로, open system call(B12)을 수정하고, 설정 파일(etc/nsl/chkopen)에 파일 접근을 제한할 UID와 제한 시간을 명시한다. 구성파일은 /etc/nsl/chkopen로 구성되며, 파일 형식은 다음 표와 같다.FIG. 5 shows a process of performing a file and resource access control function, modifying an open system call (B12), and specifying a UID and a time limit for restricting file access in a configuration file (etc / nsl / chkopen). The configuration file consists of / etc / nsl / chkopen and the file format is shown in the following table.
위 표의 파일형식을 설명하면, 첫 필드는 접근을 제한할 파일의 경로명이며, 파일명과 다음 필드는 Tab으로 구분하고, 나머지 필드는 ";"으로 구분한다. uid는 사용자의 uid이며, 제한 시작시간과 종료시간은 시와 분으로 구성된다. (예:/var/log/my.log 510;0000;2359; UID가 510인 사용자에 대해서 /var/log/my.log라는 파일에 대한 접근을 제한)In the file format of the above table, the first field is the path name of the file to be restricted, the file name and the next field are separated by Tab, and the remaining fields are separated by ";". uid is the user's uid, and the limit start time and end time consist of hours and minutes. (E.g. /var/log/my.log 510; 0000; 2359; restrict access to the file /var/log/my.log for users with UID 510)
도 6은 특정 명령어 및 프로세스 수행 제어 기능 수행과정을 나타내는 것으로, execve system call(C11)을 수정하고, 설정 파일(etc/nsl/chkexec)에 실행을 제한할 프로그램명과 UID와 제한 시간을 명시 한다. suid 또는 sgid가 부여된 프로그램도 동일한 방법으로 설정 파일에 기록을 함으로써 제한이 가능하다. 즉, sui, sgid가 설정된 프로그램은 log 파일에 실행 내역을 기록) 구성파일은 /etc/nsl/chexec이며, 파일 형식은 다음 표와 같다.6 shows a process of executing a specific command and process execution control function, modifies the execve system call (C11), and specifies a program name, UID, and time limit to limit execution in a configuration file (etc / nsl / chkexec). Programs given suid or sgid can be restricted by writing them to the configuration file in the same way. In other words, sui and sgid programs are recorded in the log file.) The configuration file is / etc / nsl / chexec and the file format is shown in the following table.
위 표의 파일형식을 설명하면, 실행을 제한할 프로그램의 경로명이고, 경로명과 다음 필드는 Tab으로 구분하며 다른 필드는 ";"으로 구분한다. 제한 시간과 종료 시간은 시와 분으로 구성한다.(예:/bin/su 520;0700;1800; UID가 520인 사용자에 대해서 su 명령을 아침 7시부터 오후 6시까지 제한)When describing the file format of the above table, it is the path name of the program to be restricted. The path name and the next field are separated by Tab, and the other fields are separated by ";". The timeout and end time consist of hours and minutes (for example, / bin / su 520; 0700; 1800; su command is restricted from 7:00 am to 6:00 pm for users with a UID of 520).
로깅 기능의 로그파일에는 제한한 사용자의 접속시도를 기록하는 login.log와 특정 프로세스 또는 명령의 수행을 기록하는 exec.log 파일과 특정 파일의 접근에 대한 내역을 기록하는 open.log 파일, root 권한으로 실행한 내역을 기록하는 파일로 구성된다. 또한 수행한 명령 또는 프로세스 실행 여부를 UID와 함께 기록된다.The log file of the logging function includes login.log, which records the access attempt of the restricted user, exec.log file, which records the execution of a specific process or command, open.log file, which records details of access of a specific file, and root privileges. It consists of a file that records the history of execution. It also records whether the command or process was performed, along with the UID.
구성파일 Update기능은 각 설정 파일들의 내용을 변경했을 경우, 변경된 내용을 바로 적용할 수 있도록 write system call을 수정한다. 즉, 모듈 load시 각 설정 파일들의 inode 번호르 읽어들인 후 변경된 파일의 inode번호와 설정 파일의 inode번호가 일치할 경우 설정파일을 읽어들인 버퍼의 내용을 update 한다.The configuration file update function modifies the write system call so that the changes can be applied immediately. That is, when the module load loads the inode number of each configuration file and the inode number of the changed file matches the inode number of the configuration file, the contents of the buffer that read the configuration file are updated.
본 발명의 리눅스 보안커널 데이터 구조는 다음 표와 같다.The Linux security kernel data structure of the present invention is shown in the following table.
본 발명의 함수별 기능은 다음 표와 같다.Functions of the present invention are shown in the following table.
따라서 리눅스 보안커널 및 보안 관리 소프트웨어의 개발은 네트워크 보안 사고에 대한 원천적인 봉쇄로 인하여 시스템의 복구에 따른 경제적 시간적 비용을 절감할 수 있다. 또한 안전한 운영체제의 기술은 미국과 같은 선진국에 의해 주도되고 있는데 이 분야에서 우리 나라 자체 기술의 확보가 시급한 실정이다. 또한 본 과제에서 개발된 커널을 통한 보안 기술은 네트워크가 사용되는 모든 분야에 응용이 가능하다. 즉, Ftp서비스, 웹 서버, Finger 서비스, POP서버, NFS(Network File System) 등에 응용 가능하다.Therefore, the development of Linux security kernel and security management software can reduce the economic and time cost of system recovery due to the original blockade of network security incidents. In addition, the technology of the safe operating system is led by advanced countries such as the United States, it is urgent to secure our own technology in this field. In addition, the security technology through the kernel developed in this project can be applied to all fields where the network is used. That is, it can be applied to Ftp service, web server, Finger service, POP server, NFS (Network File System).
전통적으로 군사 목적 및 정부기관의 중요 문서를 보호하기 위하여 적용되었던 안전한 운영체제 설계 및 구현은 TCSEC(Trusted Computer System Evaluation Criteria)의 요구사항을 적용하였다. TCSEC은 C1 (최하위 등급), C2, B1, B2, B3, A1(최상위 등급)의 6가지 등급을 가지며 각 등급별로 보안 요구 사항을 정의하고 있다. TCSEC의 요구사항에 맞게 구현된 시스템은 중요한 정보를 보호하였지만 시스템의 성능을 저하시키는 원인이 되기도 하였다. 최근 폭발적으로 증가하는 네트워크 사용 추세를 감안할 시 안전한 운영체제에 대한 필요성은 급증하였다. 그러므로 리눅스 보안커널 및 보안 관리 소프트웨어의 개발은 이러한 사용자의 요구사항을 바탕으로 한다.Secure operating system design and implementation, which has traditionally been applied to protect military objectives and important documents of government agencies, applies the requirements of the Trusted Computer System Evaluation Criteria (TCSEC). TCSEC has six classes, C1 (lowest class), C2, B1, B2, B3, and A1 (top level) and defines security requirements for each class. Implemented to meet the requirements of the TCSEC, the system protected sensitive information, but also contributed to the degradation of the system's performance. Given the recent exploding network usage trend, the need for a safe operating system has rapidly increased. Therefore, the development of Linux security kernel and security management software is based on the requirements of these users.
선진국에서는 이러한 기술 개발을 통하여 핵심기술 확보에 경쟁적으로 연구를 진행하고 있다. 이러한 기술 확보는 커널 내부에서 보안 기능을 제공하는 것으로 선진 기술을 확보한다는 의미를 갖는다. 우리 나라도 이제 시작 단계인 리눅스 보안커널 및 보안 소프트웨어 개발에 핵심 기술들을 축적하고 개선하는 노력이 따르지 않을 경우 21세기 정보화 사회에 경쟁력을 가질 수 없다.Developed countries are conducting competitive research to secure core technologies through such technology development. Securing this technology means securing the advanced technology by providing security functions inside the kernel. Korea cannot be competitive in the information society of the 21st century without efforts to accumulate and improve core technologies in the development of the Linux security kernel and security software.
Claims (1)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020000064017A KR20020033859A (en) | 2000-10-30 | 2000-10-30 | Linux security kernel |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020000064017A KR20020033859A (en) | 2000-10-30 | 2000-10-30 | Linux security kernel |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20020033859A true KR20020033859A (en) | 2002-05-08 |
Family
ID=19696169
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020000064017A KR20020033859A (en) | 2000-10-30 | 2000-10-30 | Linux security kernel |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR20020033859A (en) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100447511B1 (en) * | 2001-12-26 | 2004-09-07 | 한국전자통신연구원 | Job-based Access Control Method |
KR100501210B1 (en) * | 2002-12-03 | 2005-07-18 | 한국전자통신연구원 | Intrusion detection system and method based on kernel module in security gateway system for high-speed intrusion detection on network |
KR100657353B1 (en) * | 2005-07-26 | 2006-12-14 | (주)안랩시큐브레인 | Security system and method for supporting a variety of access control policies, and recordable medium thereof |
KR100706176B1 (en) * | 2005-07-12 | 2007-04-12 | 한국전자통신연구원 | Method and system of processing kernel patch for prevention of kernel vulnerability |
KR100759089B1 (en) * | 2005-09-26 | 2007-09-19 | (주)나즌커뮤니케이션 | method for controlling over-load of linux server |
KR100800090B1 (en) * | 2006-09-01 | 2008-02-01 | 주식회사 하우리 | System for real-time watching irp dispatching to windows device driver and method thereof |
KR100853723B1 (en) * | 2006-12-21 | 2008-08-25 | 주식회사 레드게이트 | Method for illegal privilege flow prevention and mandatory access control using the state transition model of security role in window system |
KR100853722B1 (en) * | 2006-12-21 | 2008-08-25 | 주식회사 레드게이트 | METHOD FOR ILLEGAL PRIVILEGE FLOW PREVENTION AND MANDATORY ACCESS CONTROL USING THE STATE TRANSITION MODEL OF SECURITY ROLE IN Unix/Linux SYSTEM |
KR100853721B1 (en) * | 2006-12-21 | 2008-08-25 | 주식회사 레드게이트 | Method for real-time integrity check and audit trail connected with the security kernel |
KR100915803B1 (en) * | 2006-12-05 | 2009-09-07 | 한국전자통신연구원 | Application Program Launching Method and System for Improving Security of Embedded Linux Kernel |
KR101143154B1 (en) * | 2004-04-27 | 2012-05-08 | 마이크로소프트 코포레이션 | A method and system for enforcing a security policy via a security virtual machine |
-
2000
- 2000-10-30 KR KR1020000064017A patent/KR20020033859A/en not_active Application Discontinuation
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100447511B1 (en) * | 2001-12-26 | 2004-09-07 | 한국전자통신연구원 | Job-based Access Control Method |
KR100501210B1 (en) * | 2002-12-03 | 2005-07-18 | 한국전자통신연구원 | Intrusion detection system and method based on kernel module in security gateway system for high-speed intrusion detection on network |
US8607299B2 (en) | 2004-04-27 | 2013-12-10 | Microsoft Corporation | Method and system for enforcing a security policy via a security virtual machine |
KR101143154B1 (en) * | 2004-04-27 | 2012-05-08 | 마이크로소프트 코포레이션 | A method and system for enforcing a security policy via a security virtual machine |
KR100706176B1 (en) * | 2005-07-12 | 2007-04-12 | 한국전자통신연구원 | Method and system of processing kernel patch for prevention of kernel vulnerability |
KR100657353B1 (en) * | 2005-07-26 | 2006-12-14 | (주)안랩시큐브레인 | Security system and method for supporting a variety of access control policies, and recordable medium thereof |
KR100759089B1 (en) * | 2005-09-26 | 2007-09-19 | (주)나즌커뮤니케이션 | method for controlling over-load of linux server |
KR100800090B1 (en) * | 2006-09-01 | 2008-02-01 | 주식회사 하우리 | System for real-time watching irp dispatching to windows device driver and method thereof |
KR100915803B1 (en) * | 2006-12-05 | 2009-09-07 | 한국전자통신연구원 | Application Program Launching Method and System for Improving Security of Embedded Linux Kernel |
US8677477B2 (en) | 2006-12-05 | 2014-03-18 | Samsung Electronics Co., Ltd. | Application program launching method and system for improving security of embedded Linux kernel |
KR100853721B1 (en) * | 2006-12-21 | 2008-08-25 | 주식회사 레드게이트 | Method for real-time integrity check and audit trail connected with the security kernel |
KR100853722B1 (en) * | 2006-12-21 | 2008-08-25 | 주식회사 레드게이트 | METHOD FOR ILLEGAL PRIVILEGE FLOW PREVENTION AND MANDATORY ACCESS CONTROL USING THE STATE TRANSITION MODEL OF SECURITY ROLE IN Unix/Linux SYSTEM |
KR100853723B1 (en) * | 2006-12-21 | 2008-08-25 | 주식회사 레드게이트 | Method for illegal privilege flow prevention and mandatory access control using the state transition model of security role in window system |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Fraser et al. | Hardening COTS software with generic software wrappers | |
Cho | A Framework for Alternate Queueing: Towards Traffic Management by PC-UNIX Based Routers. | |
EP1435030B1 (en) | Stateful reference monitor | |
Ghormley et al. | SLIC: An Extensibility System for Commodity Operating Systems. | |
Sekar et al. | On preventing intrusions by process behavior monitoring | |
Ta-Min et al. | Splitting interfaces: Making trust between applications and operating systems configurable | |
US7490268B2 (en) | Methods and systems for repairing applications | |
US6480962B1 (en) | System and method for protecting a client during runtime from hostile downloadables | |
US7263718B2 (en) | Security framework for supporting kernel-based hypervisors within a computing system | |
GB2403827A (en) | Kernel cryptographic module signature verification system and method | |
US7076557B1 (en) | Applying a permission grant set to a call stack during runtime | |
KR20020033859A (en) | Linux security kernel | |
Compastié et al. | Unikernel-based approach for software-defined security in cloud infrastructures | |
He et al. | Cross Container Attacks: The Bewildered {eBPF} on Clouds | |
EP1127314A1 (en) | Method and system for maintaining restricted operating environments for application programs or operating systems | |
EP1944676B1 (en) | Stateful reference monitor | |
Venkatakrishnan et al. | An Approach for Secure Software Installation. | |
Wagner et al. | A secure environment for untrusted helper applications | |
Jadidi et al. | Capexec: Towards transparently-sandboxed services (extended version) | |
Schweizer et al. | Downright: A framework and toolchain for privilege handling | |
Neuhaus et al. | Downright: a framework and toolchain for privilege handling | |
Mellstrand | Protecting software execution by dynamic environment hardening | |
Sirer et al. | Improving the security, scalability, manageability and performance of system services for network computing | |
Gehani et al. | Real-time access control reconfiguration | |
Wei et al. | Binary-centric defense of production operating systems against kernel queue injection attacks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
WITN | Withdrawal due to no request for examination |