mcpField
L
llvm-security

llvm-security

github.com/gmh5225セキュリティ89051 回インストール4 週間前に更新
リポジトリ

llvm-security について

llvm-securityは、LLVMのセキュリティ機能と実践を扱う開発者向けスキルです。サニタイザー、コンパイラの強化、シンボリック実行、ファジングを案内します。

主な機能

  1. 01サニタイザーの選択と使用
  2. 02コンパイラの強化手法
  3. 03シンボリック実行のガイド
  4. 04セキュリティ重視の実行時解析
  5. 05サニタイザー併用のファジング

活用シーン

  1. 01C/C++プログラムのメモリエラー検出
  2. 02脆弱性悪用に備えたビルドの強化
  3. 03シンボリック実行による実行経路の探索
  4. 04ファジングと実行時チェックの併用

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/gmh5225/awesome-llvm-security --skill llvm-security

インストール後、Claude Code で/llvm-securityを入力して読み込まれたか確認します。

詳細

LLVM セキュリティスキル

このスキルでは、LLVM ベースのセキュリティ機能、サニタイザー、強化メカニズム、安全なソフトウェア開発の手法を扱います。

サニタイザー

AddressSanitizer (ASan)

バッファーオーバーフロー、解放後使用、スコープ終了後使用などのメモリエラーを検出します。

# Compile with ASan
clang -fsanitize=address -g program.c -o program

# Key features
# - Stack buffer overflow detection
# - Heap buffer overflow detection  
# - Use-after-free detection
# - Memory leak detection
MemorySanitizer (MSan)

初期化されていないメモリの読み取りを検出します。

clang -fsanitize=memory -g program.c -o program
ThreadSanitizer (TSan)

マルチスレッドプログラムにおけるデータ競合を検出します。

clang -fsanitize=thread -g program.c -o program
UndefinedBehaviorSanitizer (UBSan)

実行時に未定義動作を検出します。

clang -fsanitize=undefined -g program.c -o program

# Specific checks
clang -fsanitize=signed-integer-overflow,null program.c
カスタムサニタイザーの開発
// Implementing custom memory tracking
extern "C" void __asan_poison_memory_region(void const volatile *addr, size_t size);
extern "C" void __asan_unpoison_memory_region(void const volatile *addr, size_t size);

class SecureAllocator {
public:
    void* allocate(size_t size) {
        // Add red zones around allocation
        void* ptr = malloc(size + 2 * REDZONE_SIZE);
        __asan_poison_memory_region(ptr, REDZONE_SIZE);
        __asan_poison_memory_region((char*)ptr + REDZONE_SIZE + size, REDZONE_SIZE);
        return (char*)ptr + REDZONE_SIZE;
    }
};

強化手法

スタック保護
# Stack canaries
clang -fstack-protector-strong program.c

# Stack clash protection
clang -fstack-clash-protection program.c

# Safe stack (separate stacks for safe/unsafe data)
clang -fsanitize=safe-stack program.c
制御フロー整合性 (CFI)
# Forward-edge CFI
clang -fsanitize=cfi -flto program.c

# Specific CFI schemes
clang -fsanitize=cfi-vcall      # Virtual call checks
clang -fsanitize=cfi-nvcall     # Non-virtual member call checks
clang -fsanitize=cfi-icall      # Indirect call checks
シャドウコールスタック
# Backward-edge protection (return address protection)
clang -fsanitize=shadow-call-stack program.c
位置独立実行ファイル
# Full ASLR support
clang -fPIE -pie program.c

# Position independent code for shared libraries
clang -fPIC -shared library.c -o library.so

シンボリック実行

KLEE との統合
// Mark symbolic inputs
#include <klee/klee.h>

int main() {
    int input;
    klee_make_symbolic(&input, sizeof(input), "input");
    
    if (input > 0) {
        // Path 1
    } else {
        // Path 2
    }
    return 0;
}
SymCC(コンパイルによるシンボリック実行)

シンボリック実行のためのコンパイル時インストルメンテーション:

  • IR の解釈より高速です
  • 複雑な実際のプログラムをサポートします
  • ファジングのワークフローと統合できます
シンボリック解析ツール
  • Caffeine:LLVM ベースのシンボリック実行エンジン
  • SymSan:シンボリック実行とサニタイザー
  • Haybale:Rust ベースの LLVM シンボリック実行エンジン

セキュリティに特化した解析

実行時の型チェック
// LLVM TypeSanitizer concepts
// Track type information through allocations
struct TypeInfo {
    const char* typeName;
    size_t typeSize;
    uint64_t typeHash;
};

void checkType(void* ptr, TypeInfo expected) {
    TypeInfo* actual = getTypeInfo(ptr);
    if (actual->typeHash != expected.typeHash) {
        reportTypeMismatch(ptr, actual, expected);
    }
}
メモリリークの検出
// LeakSanitizer integration
extern "C" void __lsan_do_leak_check();
extern "C" void __lsan_disable();
extern "C" void __lsan_enable();

// Custom leak tracking
class PreciseLeakSanitizer {
    std::unordered_map<void*, AllocationInfo> allocations;
    
public:
    void recordAlloc(void* ptr, size_t size, const char* file, int line) {
        allocations[ptr] = {size, file, line, getStackTrace()};
    }
    
    void recordFree(void* ptr) {
        allocations.erase(ptr);
    }
    
    void reportLeaks() {
        for (auto& [ptr, info] : allocations) {
            fprintf(stderr, "Leak: %zu bytes at %s:%d\n", 
                    info.size, info.file, info.line);
        }
    }
};

エクスプロイト緩和策の実装

リターンアドレスの保護
; Shadow stack concept in LLVM IR
define void @protected_function() {
entry:
    %return_addr = call ptr @llvm.returnaddress(i32 0)
    call void @shadow_stack_push(ptr %return_addr)
    
    ; Function body...
    
    %saved_addr = call ptr @shadow_stack_pop()
    %current_addr = call ptr @llvm.returnaddress(i32 0)
    %match = icmp eq ptr %saved_addr, %current_addr
    br i1 %match, label %safe_return, label %attack_detected
    
safe_return:
    ret void
    
attack_detected:
    call void @abort()
    unreachable
}
ポインター認証(ARM)
// Using pointer authentication on ARM64
__attribute__((target("sign-return-address")))
void signed_function() {
    // Return address is cryptographically signed
}

安全なコンパイルパイプライン

ビルドフラグのチェックリスト
# Comprehensive hardening
CFLAGS="-O2 \
    -fstack-protector-strong \
    -fstack-clash-protection \
    -fcf-protection=full \
    -fPIE \
    -D_FORTIFY_SOURCE=2 \
    -Wformat -Wformat-security \
    -fsanitize=cfi -flto"

LDFLAGS="-pie \
    -Wl,-z,relro \
    -Wl,-z,now \
    -Wl,-z,noexecstack"
コンパイラーのセキュリティチェック
  • -Wformat-security:書式文字列の脆弱性
  • -Warray-bounds:配列の境界違反
  • -Wshift-overflow:シフト演算のオーバーフロー
  • -Wnull-dereference:ヌルポインターの参照外し

ファジングとの統合

libFuzzer
// Fuzz target template
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
    // Parse/process Data
    processInput(Data, Size);
    return 0;
}
サニタイザーとファザーの組み合わせ
# Comprehensive fuzzing setup
clang -fsanitize=fuzzer,address,undefined \
      -fno-omit-frame-pointer \
      -g fuzz_target.c -o fuzzer

Windows 固有のセキュリティ

制御フローガード (CFG)
clang-cl /guard:cf program.c
SEH(構造化例外処理)
  • LLVM は Windows SEH をサポートしています
  • 安全な例外処理に使用します
  • セキュリティ監視と統合します

リソース

包括的なツール一覧については、README.md の「Security Features」「Sanitizer」「Symbolic Execution」の各セクションを参照してください。

詳細情報の取得

詳細で最新のリソースリンク、ツール一覧、プロジェクトの参照情報が必要な場合は、次の場所から最新のデータを取得してください。

https://raw.githubusercontent.com/gmh5225/awesome-llvm-security/refs/heads/main/README.md

この README には、厳選された包括的な一覧が掲載されています。

  • セキュリティ機能と強化策(「Security Features」セクション)
  • サニタイザーとメモリ安全性ツール(「Sanitizer」セクション)
  • シンボリック実行フレームワーク(「Symbolic Execution」セクション)
  • メモリリーク検出ツールと実行時チェッカー

コメント