[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
[2011 CodeEngn Conference 05] ashine - 안드로이드 리눅스에서의 시스템 해킹GangSeok Lee
2011 CodeEngn Conference 05
안드로이드 리눅스 상에서 bof 공격을 해본다. 임의로 제작한 취약한 어플리케이션을 대상으로 공격코드를 작성하여 쉘을 획득하는 과정을 보여주며설명한다. x86 환경에서와 ARM 환경에서의 공격코드 작성시 차이점에 대해 설명한다.
http://codeengn.com/conference/05
(쿼리 변환, Query Transformation,서브쿼리푸시,SubQuery Pushing)SQL튜닝을 위해 서브쿼리의 드라이빙을 제어...탑크리에듀(구로디지털단지역3번출구 2분거리)
(개발시 SQL튜닝은 기본 입니다.)서브쿼리튜닝, 쿼리 변환(Query Transformation)에 대한 이해는 SQL튜닝의 핵심입니다. 서브쿼리 푸시 및 서브쿼리의 드라이빙을 제어할 수 있는 push_subq, no_push_subq 힌트에 대해 알아보고 실행방법에 따른 서브쿼리의 종류도 설명한 영상 입니다. SQL튜닝 교육은 탑크리에듀(www.topcredu.co.kr)에서 해결해 드리겠습니다.
(오라클 SQL튜닝을 위한 쿼리문 작성법 강좌)오라클 SQL/쿼리 튜닝은 간단한 SQL구문 최적화 부터 시작을 하게되죠, SQL을 처음 사용할 때 부터 최적화 하는 방법에 주의해서 공부하시면 저절로 튜닝 됩니다. 본 PPT 강좌는 탑크리에듀(www.topcredu.co.kr), 오라클자바커뮤니티(ojc.asia)에서 제공하는 교육강좌 입니다.
SQL튜닝을 위한 도구중 하나인 "오라클의 10053 이벤트" 간단히 소개하고 오라클 함수를 만들어 간단히 테스트 후 옵티마이저의 Query Transformation, Optimization 과정(조인방법 결정, 드라이빙테이블 선정), 실행계획 생성등을 Trace 파일을 만들어 확인하는 PPT 강좌 입니다.
[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
[2011 CodeEngn Conference 05] ashine - 안드로이드 리눅스에서의 시스템 해킹GangSeok Lee
2011 CodeEngn Conference 05
안드로이드 리눅스 상에서 bof 공격을 해본다. 임의로 제작한 취약한 어플리케이션을 대상으로 공격코드를 작성하여 쉘을 획득하는 과정을 보여주며설명한다. x86 환경에서와 ARM 환경에서의 공격코드 작성시 차이점에 대해 설명한다.
http://codeengn.com/conference/05
(쿼리 변환, Query Transformation,서브쿼리푸시,SubQuery Pushing)SQL튜닝을 위해 서브쿼리의 드라이빙을 제어...탑크리에듀(구로디지털단지역3번출구 2분거리)
(개발시 SQL튜닝은 기본 입니다.)서브쿼리튜닝, 쿼리 변환(Query Transformation)에 대한 이해는 SQL튜닝의 핵심입니다. 서브쿼리 푸시 및 서브쿼리의 드라이빙을 제어할 수 있는 push_subq, no_push_subq 힌트에 대해 알아보고 실행방법에 따른 서브쿼리의 종류도 설명한 영상 입니다. SQL튜닝 교육은 탑크리에듀(www.topcredu.co.kr)에서 해결해 드리겠습니다.
(오라클 SQL튜닝을 위한 쿼리문 작성법 강좌)오라클 SQL/쿼리 튜닝은 간단한 SQL구문 최적화 부터 시작을 하게되죠, SQL을 처음 사용할 때 부터 최적화 하는 방법에 주의해서 공부하시면 저절로 튜닝 됩니다. 본 PPT 강좌는 탑크리에듀(www.topcredu.co.kr), 오라클자바커뮤니티(ojc.asia)에서 제공하는 교육강좌 입니다.
SQL튜닝을 위한 도구중 하나인 "오라클의 10053 이벤트" 간단히 소개하고 오라클 함수를 만들어 간단히 테스트 후 옵티마이저의 Query Transformation, Optimization 과정(조인방법 결정, 드라이빙테이블 선정), 실행계획 생성등을 Trace 파일을 만들어 확인하는 PPT 강좌 입니다.
3. Shell Sort
Shell Sort(쉘 정렬)는 ‘Donald L. Shell’이라는 사람이 제안한 정
렬 알고리즘으로서 삽입 정렬을 보완한 알고리즘입니다.
삽입 정렬이 어느 정도 정렬된 배열에 대해서는 대단히 빠른 것에
착안하여 고안된 알고리즘으로서 기본 삽입 정렬보다 빠른 속도로
동작합니다.
쉘 정렬의 큰 핵심은 데이터를 일정한 수의 부분 집합으로 나누고
해당 부분 집합을 삽입 정렬을 하면서 최종 부분 집합이 0이 될때까
지 반복하는 방식입니다.
4. Concept
기본적인 알고리즘의 컨셉을 살펴보면 아래와 같습니다.
1. 리스트를 일정한 기준에 따라서 부분 리스트를 생성(처음에는 N
/ 2 개의 부분 리스트를 생성함)
2. 각 부분 리스트를 삽입 정렬을 이용하여 정렬
3. 각 부분 리스트가 정렬이 되고 나면 다시 전체 리스트를 더 적은
개수로 부분 리스트로 만듬(이전의 생성한 부분 리스트의 수보다 2
배 적은 수로 생성)
4. 2번의 과정을 다시 반복함
5. 다시 부분 리스트를 3번의 규칙대로 생성
6. 부분 리스트 갯수가 0보다 클 때까지 계속 반복하며 정렬을 함
5. 만약 아래와 같은 수가 있다고 가정합니다.
처음은 원소 갯수(N) / 2개 만큼 부분 리스트를 만듭니다.
아래와 같이 4개의 부분 리스트 쌍을 정합니다.
{69, 16}, {10, 8}, {30, 31}, {2, 22}
Concept
6. {69, 16}, {10, 8}, {30, 31}, {2, 22}
해당 부분 리스트의 원소끼리 삽입 정렬을 통하여 정렬하면 아래와
같이 변경됩니다.
{16, 69}, {8, 10}, {30, 31}, {2, 22}
이번에는 부분 집합을 처음보다 2배 작은 2개로 다시 만들어봅니다.
Concept
7. {16, 30, 69, 31}, {8, 2, 10, 22}
이렇게 생성된 부분 집합을 다시 삽입 정렬로 정렬을 하면 아래와
같이 변경됩니다.
{16, 30, 31, 69}, {2, 8, 10, 22}
이제 다시 마지막으로 부분 집합을 1로 해서 삽입 정렬을 시도하면
아래와 같이 최종 정렬된 배열을 얻을 수 있습니다.
Concept
8. Features
Shell Sort(쉘 정렬)는 아래와 같은 특징을 가진 알고리즘입니다.
1. 쉘 정렬은 삽입 정렬을 활용한 정렬 알고리즘으로서 어느정도 정
렬된 상태에서의 삽입 정렬 속도가 빠른 것을 이용한 알고리즘
2. 정렬 속도는 최악의 경우는 O(n^2)이지만 최고의 경우는
O(nlogn)을 가진다.
3. Gap의 규칙에 따라서 속도가 다를 수 있다.
4. 비교적 속도 대비 알고리즘이 간단하여 활용도가 좋다.
9. Implementation
Swift를 활용하여 쉘 정렬 알고리즘을 살펴보겠습니다.
public func shellSort<T : Comparable>(_ array: inout [T]) -> [T] {
var sublistCount = array.count / 2
while sublistCount > 0 {
for pos in 0..<sublistCount {
insertionSort(&array, start: pos, gap: sublistCount)
}
sublistCount = sublistCount / 2
}
return array
}
10. Implementation
private func insertionSort<T : Comparable>(_ array: inout [T], start: Int, gap:
Int) {
// start 부터 to 위치까지 gap 만큼의 차이로 루프를 돈다.
for i in stride(from: (start + gap), to: array.count, by: gap) {
let currentValue = array[i]
var pos = i
while pos >= gap && array[pos - gap] > currentValue {
array[pos] = array[pos - gap]
pos -= gap
}
array[pos] = currentValue
}
}