[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploitsGangSeok Lee
2013 CodeEngn Conference 09
시간이 지나면 지날수록 리눅스에서는 보안 기술에 의해 원격 공격이 힘들어지고 있다. 원격 버퍼 오버플로우 공격을 위한 몇가지 트릭을 공개할 것이다. 지금까지 공격은 주로 취약점 코드에 의존성이 높거나 brute force를 사용한 방식이였다. 이번 발표에서의 공격 기술은 NULL 을 우회하여 exploit을 1바이트씩 분할하고 취약한 서버에 파일을 생성한뒤 공격하며, 단순 brute force방식에 벗어나 ASLR를 어떻게 빨리 찾아내는지 보여줄 것이다.
http://codeengn.com/conference/09
http://codeengn.com/conference/archive
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Ki-Hwan Kim
PYCON Korea 2015
Python은 과학 계산 분야에서도 이미 널리 사용되고 있습니다. numpy와 scipy 기반으로 만들어진 많은 모듈들이 휼륭한 생태계를 이루고 있기 때문입니다. 그러나 극한의 계산 성능을 요구하는 분야(HPC, High Performance Computing)에서는 여전히 C와 Fortran으로만으로 짜여진 코드들이 선호되고 있습니다. 이런 분야에서 Python에 대한 일반적인 견해는 전처리/후처리에는 유용하지만 메인 코드에 적용하기에는 느리다라는 것입니다.
이번 발표에서는 HPC 분야에서도 Python의 유용함을 보여줍니다. 계산이 집중된 부분만을 Fortran, C로 구현하여 Python 메인 코드에 접합하면, Python의 장점은 충분히 활용하면서도 계산 성능에 큰 손해는 보지 않을 수 있습니다. 게다가 CUDA-C, OpenCL-C와 연동하면 GPU, MIC와 같은 가속 프로세서들도 비교적 쉽게 활용할 수 있습니다. 이번 발표에서는 간단한 시뮬레이션 코드를 예제로 사용하여 Python 코드로부터 시작하여 Fortran, C, CUDA-C, OpenCL-C 등을 단계적으로 접합해 나가는 것을 보여줄 것입니다.
[2011 CodeEngn Conference 05] ashine - 안드로이드 리눅스에서의 시스템 해킹GangSeok Lee
2011 CodeEngn Conference 05
안드로이드 리눅스 상에서 bof 공격을 해본다. 임의로 제작한 취약한 어플리케이션을 대상으로 공격코드를 작성하여 쉘을 획득하는 과정을 보여주며설명한다. x86 환경에서와 ARM 환경에서의 공격코드 작성시 차이점에 대해 설명한다.
http://codeengn.com/conference/05
안드로이드에서 비디오 재생하는 법, MediaPlayer와 VideoView를 정리했습니다.
예제 소스: https://github.com/luvgaram/android_GDG_examples
GDG Korea 2015 11월 정기모임에서 발표한 자료입니다.
NHN NEXT 모바일 전공 임은주
[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploitsGangSeok Lee
2013 CodeEngn Conference 09
시간이 지나면 지날수록 리눅스에서는 보안 기술에 의해 원격 공격이 힘들어지고 있다. 원격 버퍼 오버플로우 공격을 위한 몇가지 트릭을 공개할 것이다. 지금까지 공격은 주로 취약점 코드에 의존성이 높거나 brute force를 사용한 방식이였다. 이번 발표에서의 공격 기술은 NULL 을 우회하여 exploit을 1바이트씩 분할하고 취약한 서버에 파일을 생성한뒤 공격하며, 단순 brute force방식에 벗어나 ASLR를 어떻게 빨리 찾아내는지 보여줄 것이다.
http://codeengn.com/conference/09
http://codeengn.com/conference/archive
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Ki-Hwan Kim
PYCON Korea 2015
Python은 과학 계산 분야에서도 이미 널리 사용되고 있습니다. numpy와 scipy 기반으로 만들어진 많은 모듈들이 휼륭한 생태계를 이루고 있기 때문입니다. 그러나 극한의 계산 성능을 요구하는 분야(HPC, High Performance Computing)에서는 여전히 C와 Fortran으로만으로 짜여진 코드들이 선호되고 있습니다. 이런 분야에서 Python에 대한 일반적인 견해는 전처리/후처리에는 유용하지만 메인 코드에 적용하기에는 느리다라는 것입니다.
이번 발표에서는 HPC 분야에서도 Python의 유용함을 보여줍니다. 계산이 집중된 부분만을 Fortran, C로 구현하여 Python 메인 코드에 접합하면, Python의 장점은 충분히 활용하면서도 계산 성능에 큰 손해는 보지 않을 수 있습니다. 게다가 CUDA-C, OpenCL-C와 연동하면 GPU, MIC와 같은 가속 프로세서들도 비교적 쉽게 활용할 수 있습니다. 이번 발표에서는 간단한 시뮬레이션 코드를 예제로 사용하여 Python 코드로부터 시작하여 Fortran, C, CUDA-C, OpenCL-C 등을 단계적으로 접합해 나가는 것을 보여줄 것입니다.
[2011 CodeEngn Conference 05] ashine - 안드로이드 리눅스에서의 시스템 해킹GangSeok Lee
2011 CodeEngn Conference 05
안드로이드 리눅스 상에서 bof 공격을 해본다. 임의로 제작한 취약한 어플리케이션을 대상으로 공격코드를 작성하여 쉘을 획득하는 과정을 보여주며설명한다. x86 환경에서와 ARM 환경에서의 공격코드 작성시 차이점에 대해 설명한다.
http://codeengn.com/conference/05
안드로이드에서 비디오 재생하는 법, MediaPlayer와 VideoView를 정리했습니다.
예제 소스: https://github.com/luvgaram/android_GDG_examples
GDG Korea 2015 11월 정기모임에서 발표한 자료입니다.
NHN NEXT 모바일 전공 임은주
2. 1.트랙 활성화 요청 안드로이드 아나토미 정리
Mediaplayerservice.cpp
void MediaPlayerService::AudioOutput::start()
{
if (mTrack) {
mTrack->start();
}
}
AudioTrack,cpp
void AudioTrack::start()
{
t->run("AudioTrackThread", THREAD_PRIORITY_AUDIO_CLIENT);audiotrack 실행
status = mAudioTrack->start();
}
status_t AudioFlinger::TrackHandle::start() {
return mTrack->start();
}
status_t AudioFlinger::PlaybackThread::Track::start(){
playbackThread->addTrack_l(this);
}
status_t AudioFlinger::PlaybackThread::addTrack_l{
track->mRetryCount = kMaxTrackStartupRetries;pcm data 버퍼에 채워질때 까지 시도하는 retry count(50)
mActiveTracks.add(track); ---(1)
mWaitWorkCV.broadcast(); ----(2)
mixerthread의 mWaitWorkCV.wait(mLock); 에서 기다리는 thread의 lock을 풀어준다.
}
2
3. 1.트랙 활성화 요청 안드로이드 아나토미 정리
(1)mActiveTracks.add(track);
트랙활성화 vector에 등록한다. ActiveTracks는 SortedVector 형이다.
mActiveTracks
track
PCM
…. Audio mixer 데이터
track add
PCM
데이터
PCM
데이터
(2)mWaitWorkCV.broadcast();
mixerthread의 mWaitWorkCV.wait(mLock); 에서 기다리는 thread의 lock을 풀어준다.
1)활성화 트랙 벡터 획득
2)컨디션 대기 prepareTrack_l()
Y
3)PCM 오디오 출력
데이터유무
N
4)재시도횟수 Y 트랙
> 50 제거
Mixerthread threadloop()
N 동작과정
5)일시대기
3
4. 2.Mixerthread thread loop 동작 과정 안드로이드 아나토미 정리
bool AudioFlinger::MixerThread::threadLoop()
{
while (!exitPending())
{
1)활성화 트랙 벡터 획득
const SortedVector< wp<Track> >& activeTracks = mActiveTracks;
//activetrack이 없을 경우(보통 믹스쓰레드가 처음 만들어 지면, active track 이 없기 때문에 이쪽으로 들어온다.)
if UNLIKELY((!activeTracks.size() && systemTime() > standbyTime) || mSuspended) {
2)컨디션 대기
mWaitWorkCV.wait(mLock);
여기서 기디리다가, PlaybackThread::addTrack_l 의 mWaitWorkCV.broadcast();
이 불리면 대기상태에서 깨어난다.
continue; while문의 처음으로 이동
}
3)PCM 데이터 유무 확인, 4)재시도 횟수 확인
mixerStatus = prepareTracks_l(activeTracks, &tracksToRemove);
3,4 과정은 prepareTracks_l에서 수행된다.
//오디오 출력
if (sleepTime == 0) { Sleeptime 0은 buffer에 data가 있다는 의미이다.
//오디오 출력
}
else{ 5)일시 대기
usleep(sleepTime);
sleeptime동안 sleep후에 다시 loop의 처음으로 돌아가서 prepareTracks_l 안에서 pcm data 유무 및
재시도 횟수를 확인한후 재시도 횟수가 50을 넘었어면 활성화 트랙 벡터에서 제거된다.
}
4
5. 2.Mixerthread thread loop-prepareTracks_l 안드로이드 아나토미 정리
uint32_t AudioFlinger::MixerThread::prepareTracks_l
{
size_t count = activeTracks.size();
for (size_t i=0 ; i<count ; i++) activetrack 만큼 for 문을 돌면서
{
if (cblk->framesReady() && track->isReady() && !track->isPaused() && !track->isTerminated())
{
//pcm data가 있으면 mixing을 위해서 AudioMixer의 setParameter 를 불러서
paratmeter등을 설정한다.(volume,format, mainbuffer 등)
}
else
{
retrycount가 0보다 같거나 작으면 즉, 50번을 기다렸는데 pcm data가 없으면
if (--(track->mRetryCount) <= 0) {
tracksToRemove->add(track);
tracksToRemove 에 추가.
}
else if (mixerStatus != MIXER_TRACKS_READY)
{
mixerStatus = MIXER_TRACKS_ENABLED;
status를 MIXER_TRACKS_ENABLED 로 유지 하면서 pcm data가 들어올때까지 기다린다.
}
mAudioMixer->disable(AudioMixer::MIXING);
트랙의 pcm 데이터를 오디오 믹서가 믹싱하지 않도록 설정한다.
}
}
count = tracksToRemove->size();
for (size_t i=0 ; i<count ; i++){
mActiveTracks.remove(track);
}
tracksToRemove size만큼 for문을 돌면서 해당 track을 활성화 트랙 벡터에서 제거한다.
5