Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
OpenAttack — 텍스트 적대적 공격을 위한 오픈소스 패키지 | Kitploit
도구/GitHubGitHub/thunlp/openattack
Machine LearningPapers & ResearchLearning & EducationAI SecurityAdversarial Attack
GitHubthunlp/openattack

OpenAttack

텍스트 적대적 공격을 위한 오픈소스 패키지

저장소 보기
778127674년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

OpenAttack Logo

Github Runner Covergae Status ReadTheDoc Status PyPI version GitHub release (latest by date) GitHub PRs are Welcome

문서 • 기능 및 사용 • 사용 예시 • 공격 모델 • 도구 키트 디자인

OpenAttack는 텍스트 적대적 공격(adversarial attack)의 전체 과정(텍스트 전처리, 피해자 모델 접근, 적대적 예제 생성 및 평가)을 처리하는 오픈소스 Python 기반 텍스트 적대적 공격 도구 키트입니다.

기능 및 사용

OpenAttack의 특징:

⭐️ 모든 공격 유형 지원. OpenAttack는 문장/단어/문자 수준의 변조(perturbation) 및 그래디언트/점수/결정 기반/블라인드 공격 모델 등 모든 유형의 공격을 지원합니다.

⭐️ 다국어 지원. OpenAttack는 현재 영어와 중국어를 지원합니다. 확장 가능한 설계로 더 많은 언어를 신속하게 지원할 수 있습니다.

⭐️ 병렬 처리. OpenAttack는 공격 모델의 멀티프로세스 실행을 지원하여 공격 효율성을 향상시킵니다.

⭐️ 🤗 Hugging Face 호환성. OpenAttack는 🤗 Transformers 및 Datasets 라이브러리와 완전히 통합됩니다.

⭐️ 뛰어난 확장성. 사용자 정의 피해자 모델을 사용자 정의 데이터셋에서 쉽게 공격하거나 사용자 정의 공격 모델을 개발 및 평가할 수 있습니다.

OpenAttack의 다양한 용도:

✅ 공격 모델을 위한 다양한 편리한 베이스라인 제공

✅ 포괄적인 평가 지표를 사용한 공격 모델의 철저한 평가

✅ 공통 공격 구성 요소를 활용한 새로운 공격 모델의 신속한 개발 지원

✅ 다양한 적대적 공격에 대한 기계 학습 모델의 견고성(robustness) 평가

✅ 생성된 적대적 예제로 훈련 데이터를 보강하여 기계 학습 모델의 견고성을 향상시키는 적대적 훈련(adversarial training) 수행

설치

1. pip 사용 (권장)```bash

pip install OpenAttack

#### 2. 이 저장소 클론하기```bash
git clone https://github.com/thunlp/OpenAttack.git
cd OpenAttack
python setup.py install

설치 후, demo.py를 실행하여 OpenAttack이 제대로 작동하는지 확인할 수 있습니다:``` python demo.py

![demo](https://assets.kitploit.com/production/public/readmes/4421/8322af527eba3c3dcd09c66e50aa3a1229ca0f529018fa6d08b6d8349eb0a51f.gif)
## 사용 예제

#### 내장 피해자 모델 공격

OpenAttack는 일반적으로 사용되는 NLP 모델인 BERT ([Devlin et al. 2018](https://arxiv.org/abs/1810.04805)) 및 RoBERTa ([Liu et al. 2019](https://arxiv.org/abs/1907.11692))를 내장하고 있으며, 이들은 일반적으로 사용되는 데이터셋(예: [SST-2](https://nlp.stanford.edu/sentiment/treebank.html))에 대해 미세 조정되었습니다. 이러한 내장 피해자 모델에 대해 손쉽게 적대적 공격을 수행할 수 있습니다.

다음 코드 스니펫은 SST-2 데이터셋에서 BERT를 공격하기 위해 탐욕 알고리즘 기반의 공격 모델인 PWWS ([Ren et al., 2019](https://www.aclweb.org/anthology/P19-1103.pdf))를 사용하는 방법을 보여줍니다 (전체 실행 가능 코드는 [여기](https://github.com/thunlp/openattack/blob/master/examples/workflow.py)에 있습니다).```python
import OpenAttack as oa
import datasets # use the Hugging Face's datasets library
# change the SST dataset into 2-class
def dataset_mapping(x):
    return {
        "x": x["sentence"],
        "y": 1 if x["label"] > 0.5 else 0,
    }
# choose a trained victim classification model
victim = oa.DataManager.loadVictim("BERT.SST")
# choose 20 examples from SST-2 as the evaluation data 
dataset = datasets.load_dataset("sst", split="train[:20]").map(function=dataset_mapping)
# choose PWWS as the attacker and initialize it with default parameters
attacker = oa.attackers.PWWSAttacker()
# prepare for attacking
attack_eval = OpenAttack.AttackEval(attacker, victim)
# launch attacks and print attack results 
attack_eval.eval(dataset, visualize=True)
사용자 정의 피해자 모델

다음 코드 조각은 SST-2에서 사용자 정의 감정 분석 모델(NLTK로 구축된 통계 모델)을 공격하기 위해 PWWS를 사용하는 방법을 보여줍니다 (전체 실행 가능 코드는 여기에 있습니다).```python import OpenAttack as oa import numpy as np import datasets import nltk from nltk.sentiment.vader import SentimentIntensityAnalyzer

configure access interface of the customized victim model by extending OpenAttack.Classifier.

class MyClassifier(oa.Classifier): def init(self): # nltk.sentiment.vader.SentimentIntensityAnalyzer is a traditional sentiment classification model. nltk.download('vader_lexicon') self.model = SentimentIntensityAnalyzer()

def get_pred(self, input_):
    return self.get_prob(input_).argmax(axis=1)

# access to the classification probability scores with respect input sentences
def get_prob(self, input_):
    ret = []
    for sent in input_:
        # SentimentIntensityAnalyzer calculates scores of “neg” and “pos” for each instance
        res = self.model.polarity_scores(sent)

        # we use 𝑠𝑜𝑐𝑟𝑒_𝑝𝑜𝑠 / (𝑠𝑐𝑜𝑟𝑒_𝑛𝑒𝑔 + 𝑠𝑐𝑜𝑟𝑒_𝑝𝑜𝑠) to represent the probability of positive sentiment
        # Adding 10^−6 is a trick to avoid dividing by zero.
        prob = (res["pos"] + 1e-6) / (res["neg"] + res["pos"] + 2e-6)

        ret.append(np.array([1 - prob, prob]))
    
    # The get_prob method finally returns a np.ndarray of shape (len(input_), 2). See Classifier for detail.
    return np.array(ret)

def dataset_mapping(x): return { "x": x["sentence"], "y": 1 if x["label"] > 0.5 else 0, }

load some examples of SST-2 for evaluation

dataset = datasets.load_dataset("sst", split="train[:20]").map(function=dataset_mapping)

choose the costomized classifier as the victim model

victim = MyClassifier()

choose PWWS as the attacker and initialize it with default parameters

attacker = oa.attackers.PWWSAttacker()

prepare for attacking

attack_eval = oa.AttackEval(attacker, victim)

launch attacks and print attack results

attack_eval.eval(dataset, visualize=True)

</details>


<details>
<summary><strong>사용자 정의 데이터셋</strong></summary>

다음 코드 스니펫은 **사용자 정의** 데이터셋에서 기존의 미세 조정된 감정 분석 모델을 공격하기 위해 PWWS를 사용하는 방법을 보여줍니다 (전체 실행 코드는 [여기](https://github.com/thunlp/openattack/blob/master/examples/custom_dataset.py)에 있습니다).```python
import OpenAttack as oa
import transformers
import datasets

# load a fine-tuned sentiment analysis model from Transformers (you can also use our fine-tuned Victim.BERT.SST)
tokenizer = transformers.AutoTokenizer.from_pretrained("echarlaix/bert-base-uncased-sst2-acc91.1-d37-hybrid")
model = transformers.AutoModelForSequenceClassification.from_pretrained("echarlaix/bert-base-uncased-sst2-acc91.1-d37-hybrid", num_labels=2, output_hidden_states=False)
victim = oa.classifiers.TransformersClassifier(model, tokenizer, model.bert.embeddings.word_embeddings)

# choose PWWS as the attacker and initialize it with default parameters
attacker = oa.attackers.PWWSAttacker()

# create your customized dataset
dataset = datasets.Dataset.from_dict({
    "x": [
        "I hate this movie.",
        "I like this apple."
    ],
    "y": [
        0, # 0 for negative
        1, # 1 for positive
    ]
})

# prepare for attacking
attack_eval = oa.AttackEval(attacker, victim, metrics = [oa.metric.EditDistance(), oa.metric.ModificationRate()])
# launch attacks and print attack results
attack_eval.eval(dataset, visualize=True)
멀티프로세싱
도구 다운로드