전체 글 126

UART로 라즈베리파이 커널을 디버깅하기 위한 환경 세팅

항상 리눅스 커널을 디버깅하고 테스트 할때는 qemu 를 사용했어서 실제 컴퓨터에서 동작하고 있는 커널을 디버깅하고 테스트 해보고 싶다는 생각을 늘 해왔습니다. 하지만 가지고 있는 컴퓨터가 그닥 많지도 않았고 실제로 사용중인 컴퓨터를 순전히 커널 분석과 패치를 위해서 건드리는건 현실적으로 힘들었기 때문에 포기하고 있었는데, 문득 생각해보니 집 구석에 방치되어있던 라즈베리파이4 가 있었던게 떠올라서 이거라면 내 마음대로 건드려도 괜찮겠다 싶어 한번 도전해봤습니다. 제가 구상하는 라즈베리파이 커널 테스트 방식은 대략 이렇습니다. 1. 임의로 패치한 커스텀 커널, 모듈, dtb 등등 을 scp와 rsync로 라즈베리파이에 배포2. UART 로 라즈베리파이 커널에 gdb를 attach3. netconsole로..

Linux kernel 드라이버에서 발견한 버그를 재현 & 패치해서 기여하기

그 동안 리눅스 커널에 기여할때는 따로 기록을 남기지 않아서 한번 글로 정리해야겠다는 생각을 가지고 있었는데, 마침 이번에 exynos의 drm 드라이버를 패치했기 때문에 이걸 기반으로 글을 작성해보기로 했습니다. exynos를 선택한 이유가 따로 있었던건 아니고, 어느날 문득 linux kernel에 있는 삼성 exynos와 관련된 드라이버들을 분석해보고 싶다는 생각이 들어서 관련 드라이버들의 코드를 분석해보기 시작했습니다. 그러다가 exynos 가상 디스플레이 드라이버를 분석해보게 됐는데, 이 커널 드라이버의 ioctl 함수가 굉장히 이상하게 구현되어있다는걸 알게되서 이 드라이버의 취약점을 더 자세히 분석해서 패치해보는걸 목표로 잡게됐습니다. https://git.kernel.org/pub/sc..

Linux 에서 Dell workstation의 쿨링팬 속도조절을 자동화 해보기

얼마전에 퍼징머신을 하나 장만하려고 Dell 중고서버를 구매했습니다. 조금 오래된 cpu가 장착되어있긴 하지만 커널 퍼징은 vcpu가 많을수록 더 많은 vm을 돌릴수 있기 때문에 개별 코어의 성능이 조금 부족해도 별 상관 없습니다. 원래는 윈도우가 설치된 메인 컴퓨터에 리눅스 VM을 하나 띄워놓고 퍼징을 했었기 때문에 항상 아쉬운 마음이 들었었는데, 새로 사온 중고서버는 vcpu가 80개나 되기 때문에 vm 하나당 2개의 vcpu를 할당해도 최대 40개의 vm으로 퍼징을 돌릴수 있게되서 정말 만족스럽습니다. 하지만 한가지 아쉬운것이 있는데, Dell 자체 bios에서는 쿨링팬 속도를 세밀하게 조정할수 없다는것 입니다. 저의 메인 컴퓨터에서는 msi 메인보드를 사용하고 있어서 bios에서 이런..

CVE-2023-21768 : Windows Local Privilege Escalation 분석 공부

개요 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-21768 CVE - CVE-2023-21768 20221213 Disclaimer: The record creation date may reflect when the CVE ID was allocated or reserved, and does not necessarily indicate when this vulnerability was discovered, shared with the affected vendor, publicly disclosed, or updated in CVE. cve.mitre.org 처음 해보는 원데이 취약점 분석입니다. 보통 윈도우 관련된 심각한 취약점들은 옛날 버전의 운..

리눅스 커널 익스플로잇 공부를 위한 커널 프로그래밍 공부 (2)

Character Device Driver: 버퍼 캐시를 사용하지 않고 데이터를 한번에 하나의 문자를 읽고 쓰는 드라이버 Block Device Driver : 버퍼 캐시를 통한 임의 접근과 블록 단위 입출력이 가능한 드라이버 Network Device Driver : 네트워크 스택과 네트워크 하드웨어 사이에 위치해 데이터의 송수신을 담당하는 드라이버 file_operations 구조체는 Charactor Device, Block Device 드라이버와 일반 프로그램 간의 통신을 위해 제공되는 인터페이스 입니다. read,write,open 등의 함 포인터들을 사용할수 있다는 특징을 가지고 있고 Network Device 드라이버는 위의 구조체를 사용하지 않는 대신, include/linux/netdev..

728x90