Miami left 12 runners on base and went 1 for 16 with runners in scoring position. But it salvaged a frustrating afternoon with its late rally, winning for the seventh time in eight games.
Luis Arraez had two hits for the Marlins, raising his batting average to .402 in 60 games. Sandy Alcantara pitched seven innings of three-hit ball.
Arraez helped spark Miami's rally, following Garrett Cooper's pinch-hit single with another base hit against Joe Kelly (1-3). A bases-loaded error on shortstop Tim Anderson brought home one run, and Arraez scored on Jesús Sánchez's walk.
After Yuli Gurriel drove in another run with a fielder's choice and Joey Wendle struck out, Segura made it 5-1 with a line drive to left against Garrett Crochet.
Steven Okert (3-0) got three outs for the win, working around Elvis Andrus' leadoff single in the eighth.
Michael Kopech pitched five scoreless innings for Chicago, which dropped to 6-2 in June. Kopech, who hit his first two batters and worked out of trouble for most of the day, has a 1.72 ERA over his last five starts.
The White Sox got their only run when Andrew Vaughn drove Alcantara's first pitch of the fourth into the visitors' bullpen in right. It was his first homer since May 29 and No. 8 on the year.
Marlins: Cooper was out of the starting lineup after he was hit on his left arm while trying to catch 3B Segura's errant throw on Elvis Andrus' third-inning single in the series opener. Manager Skip Schumaker said Cooper had an MRI and X-ray that came back negative.
White Sox: Vaughn was shaken up after he was hit by a pitch on his left elbow in the sixth. He was checked on by manager Pedro Grifol and a trainer but remained in the game. ... OF Eloy Jiménez (lower left leg) missed his second straight game. He could return to the lineup during the team's three-game series at the Los Angeles Dodgers.
Marlins left-hander Braxton Garrett (2-2, 4.47 ERA) and White Sox right-hander Lucas Giolito (5-4, 3.75 ERA) start Sunday in the series finale. Garrett worked five innings of four-run ball in a 9-6 victory over Kansas City on Monday. Giolito tossed six hitless innings in a 3-2 victory at the New York Yankees on Tuesday night.