Physical memory 접근
글쓴이: andrea0403 / 작성시간: 목, 2018/02/08 - 4:33오후
제가 이러한 쪽의 코딩을 전혀 안해봐서 감이 전혀 없어서
가능한지의 여부와 간단한 코드 요청드립니다.
어떠한 array가 있을때,
physical memory를 알아낸 후
physical memory로 다시 그 array에 접근해서 내용을 확인하는 것이
가능한가요?
가능하다면 전체 코드좀 요청드립니다..!
Forums:
어떤 플랫폼에서, 어떤 종류의 프로그래밍을 하고
어떤 플랫폼에서, 어떤 종류의 프로그래밍을 하고 계시는지에 따라 다릅니다.
Linux(Ubuntu)이고, user space에서
Linux(Ubuntu)이고, user space에서 접근하려고 합니다
/proc/self/maps에서 현재 프로세스가 어떤
/proc/self/maps에서 현재 프로세스가 어떤 메모리 공간을 사용하고 있고 /dev/mem을 통해서 접근이 가능하긴 한데, 궁극적으로 무엇을 만드려고 하시는 건가요? 문제의 배열이 특정 프로세스에서 만들어진 거라면 그 프로세스가 죽은 후에는 그 메모리에 뭐가 올지 모릅니다. 게다가 요새의 리눅스라면 ASLR 때문에 원하시는 게 더 까다로울 겁니다.
그냥 현재는 그것이 가능한지 test를 해보려고
그냥 현재는 그것이 가능한지 test를 해보려고 합니다.
혹시 그렇다면 그 메모리의 침범 여부를 알 수는 없나요?
즉
1. array의 physical memory를 알아낸다.
2. physical memory의 침범 여부를 알 수 있다.
3. 다시 그 physical memory로 접근해 array의 내용을 받아온다.
입니다.
또 ASLR은 해제할 수 있는 것으로 검색되는데 맞나요?
저도 보안을 공부하면서 알게된거라 자세한 것은 잘
저도 보안을 공부하면서 알게된거라 자세한 것은 잘 알지 못하지만,
리눅스 커널단에서 모듈로 mmap 핸들러를 제작 하신 다음에 해당 디바이스 드라이버 파일을 통해 유저엔드 소프트웨어에서 파일로 접근을 하면 된다고 알고있습니다.
보안 문서이기는 하지만... 어느정도 도움이 될 것 같아서 링크 공유해드립니다.
https://www.exploit-db.com/docs/english/42760-kernel-driver-mmap-handler-exploitation.pdf
보통 버퍼로 해결하죠.
대충 10~100메가 정도 동적할당 해 놓고 삽입하는 데이터 크기가 오버플로우 될 때마다 다시 그만큼 동적할당해주면 됩니다. 또한 처음 메모리 주소값을 기준으로 버퍼 크기를 얻어 해당 데이터는 처음 주소값+버퍼 크기까지 할당되며 그 다음 데이터는 주소값+버퍼길이 만큼 되겠죠? 그런식으로 스택 또는 큐 형식으로 메모리에 원하시는 데이터 올리시면 됩니다. 삽입 삭제는 구현하기 나름이고요.. 이걸 또 공유 메모리로 만들면 해당 메모리에 접근할 때 세마포어,뮤텍스를 적절하게 사용해서 이중 읽기를 방지하기도 하구요. 아니면 댓으로 알려주세요~ ^^;;
댓글 달기